Makefile不能使用`conda activate`

mat*_*_js 9 python makefile anaconda conda

为了运行一些python脚本,我需要在我的makefile中激活一个conda环境,但是,每当我尝试运行时conda activate env_name,都会收到以下消息:

CommandNotFoundError:您的外壳尚未正确配置为使用“ conda activate”。如果您的外壳是Bash或Bourne变体,请使用以下命令为当前用户启用conda

$ echo ". /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

或(对于所有用户)启用conda

$ sudo ln -s /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh
Run Code Online (Sandbox Code Playgroud)

上面的选项将永久启用'conda'命令,但不会将conda的基础(根)环境放在PATH上。为此,运行

$ conda activate
Run Code Online (Sandbox Code Playgroud)

在您的终端中,或将基本环境永久放在PATH上,请运行

$ echo "conda activate" >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

在conda 4.4之前,建议的激活conda的方法是修改〜/ .bash_profile文件中的PATH。您应该手动删除看起来像这样的行

export PATH="/Users/MY_USERNAME/anaconda3/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

^^^上面的行应该不再位于〜/ .bash_profile文件中!^^^

我尝试通过SHELL := /bin/zsh在顶部添加来更改makefile的外壳,但这不能解决问题。另外,我需要此makefile才能使用计算机的默认外壳程序运行(我的一些队友使用zsh,其他人使用bash)。似乎无论我做什么,我都无法conda activate在makefile中工作。

我该怎么做才能使其正常工作,或者这是不可能的?

小智 10

.ONESHELL:您应该在脚本开头使用指令。这一切都在同一个 shell 中运行。


ind*_*824 8

@Traveler的精彩解决方案。但请记住@Felipe Maza@Tomasz Bartkowiak.ONESHELL:的建议,在食谱之前添加可以解决所有错误。

我使用Linux系统作为zsh我的shell,当前最新conda版本:4.12.0

因此,配方将是:

.ONESHELL:

SHELL = /bin/zsh
CONDA_ACTIVATE = source $$(conda info --base)/etc/profile.d/conda.sh ; conda activate ; conda activate

# Create conda env from env.yml and compile and install exact pip packages
conda-pip:
    conda env update --prune -f env.yml
    $(CONDA_ACTIVATE) <<env_name>>
    pip-compile requirements/req.in
    pip-sync requirements/req.txt
Run Code Online (Sandbox Code Playgroud)

conda-pip执行以下操作:

  1. 基于env.yml之前创建的conda环境创建。
  2. <<env_name>>通过替换为 .conf 文件中设置的环境名称来激活 conda 环境env.yml
  3. 使用pip-compilepip-sync编译并安装精确的 pip 包到 conda 环境。

注意:此后您仍然需要激活conda-pipconda 环境才能在终端中使用它,因为在单独的子 shell 中启动和结束。

您可以在此处查看更多信息pip-compilepip-syncpip -tools


Tra*_*ler 5

经过一番搜索后,我想出了将这种模式添加到我的Makefile中进行conda activate工作的方法。其他人可能会简化。

# Need to specify bash in order for conda activate to work.
SHELL=/bin/bash
# Note that the extra activate is needed to ensure that the activate floats env to the front of PATH
CONDA_ACTIVATE=source $$(conda info --base)/etc/profile.d/conda.sh ; conda activate ; conda activate

py3build:
    ($(CONDA_ACTIVATE) py3.6 ; python setup.py build )
Run Code Online (Sandbox Code Playgroud)


Max*_*kin 0

conda activate除其他外,设置环境变量。但是,GNU Make在新生成的 shell 中调用配方的每一行。您需要conda activate在配方的每一行中调用。

更好的方法是让 makefile 执行此操作conda activate,然后在新激活的环境中重新运行自身,然后才构建目标。