提问者:小点点

makefile不能使用conda激活


我需要在makefile中激活一个conda环境,以便运行一些python脚本,然而,每当我尝试运行conda激活env_name时,我都会收到以下消息:

CommandNotFoundError:您的shell未正确配置为使用“conda activate”。如果您的shell是Bash或Bourne变体,请使用为当前用户启用conda

$ echo ". /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile

或者,对于所有用户,使用

$ sudo ln -s /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh

上面的选项将永久启用conda命令,但是它们不会将conda的基本(根)环境放在PATH上。要这么做,就跑

$ conda activate

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

$ echo "conda activate" >> ~/.bash_profile

在conda 4.4之前,推荐的激活conda的方法是在~/.bash_profile文件中修改PATH。您应该手动删除看起来像

export PATH="/Users/MY_USERNAME/anaconda3/bin:$PATH"

^^^上述行不应再位于~/中。bash_配置文件^^^

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

我能做些什么让它工作,还是这不可能?


共3个答案

匿名用户

在进行了一些搜索之后,我想到了将此模式添加到我的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 )

匿名用户

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

匿名用户

您需要记住的一件重要事情是,Makefile将在单独的子shell中执行配方的每一行,因此,在一行中导出PATH不会影响下一行Makefile中的命令可以看到的内容!请参阅Makefile手册-配方执行:

当需要执行配方来更新目标时,它们会通过为配方的每一行调用新的子shell来执行,除非。ONESHELLspecial target已生效(请参见使用一个Shell)(实际上,make可能会使用不影响结果的快捷方式。)

请注意:这意味着设置shell变量和调用shell命令(例如为每个进程设置本地上下文的cd)不会影响配方中的以下行。