我需要在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激活。
我能做些什么让它工作,还是这不可能?
在进行了一些搜索之后,我想到了将此模式添加到我的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来执行,除非。ONESHELL
special target已生效(请参见使用一个Shell)(实际上,make可能会使用不影响结果的快捷方式。)
请注意:这意味着设置shell变量和调用shell命令(例如为每个进程设置本地上下文的cd)不会影响配方中的以下行。