mat*_*_js 9 python makefile anaconda conda
为了运行一些python脚本,我需要在我的makefile中激活一个conda环境,但是,每当我尝试运行时conda activate env_name,都会收到以下消息:
CommandNotFoundError:您的外壳尚未正确配置为使用“ conda activate”。如果您的外壳是Bash或Bourne变体,请使用以下命令为当前用户启用conda
Run Code Online (Sandbox Code Playgroud)$ echo ". /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile或(对于所有用户)启用conda
Run Code Online (Sandbox Code Playgroud)$ sudo ln -s /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh /etc/profile.d/conda.sh上面的选项将永久启用'conda'命令,但不会将conda的基础(根)环境放在PATH上。为此,运行
Run Code Online (Sandbox Code Playgroud)$ conda activate在您的终端中,或将基本环境永久放在PATH上,请运行
Run Code Online (Sandbox Code Playgroud)$ echo "conda activate" >> ~/.bash_profile在conda 4.4之前,建议的激活conda的方法是修改〜/ .bash_profile文件中的PATH。您应该手动删除看起来像这样的行
Run Code Online (Sandbox Code Playgroud)export PATH="/Users/MY_USERNAME/anaconda3/bin:$PATH"^^^上面的行应该不再位于〜/ .bash_profile文件中!^^^
我尝试通过SHELL := /bin/zsh在顶部添加来更改makefile的外壳,但这不能解决问题。另外,我需要此makefile才能使用计算机的默认外壳程序运行(我的一些队友使用zsh,其他人使用bash)。似乎无论我做什么,我都无法conda activate在makefile中工作。
我该怎么做才能使其正常工作,或者这是不可能的?
@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执行以下操作:
env.yml之前创建的conda环境创建。<<env_name>>通过替换为 .conf 文件中设置的环境名称来激活 conda 环境env.yml。pip-compile和pip-sync编译并安装精确的 pip 包到 conda 环境。注意:此后您仍然需要激活
conda-pipconda 环境才能在终端中使用它,因为在单独的子 shell 中启动和结束。
您可以在此处查看更多信息pip-compile:pip-syncpip -tools
经过一番搜索后,我想出了将这种模式添加到我的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)
conda activate除其他外,设置环境变量。但是,GNU Make在新生成的 shell 中调用配方的每一行。您需要conda activate在配方的每一行中调用。
更好的方法是让 makefile 执行此操作conda activate,然后在新激活的环境中重新运行自身,然后才构建目标。