我需要在我的makefile中激活一个conda环境才能运行一些python脚本,但是,每当我尝试运行conda activate env_name
时,都会收到以下消息:
CommandNotFoundError:您的外壳尚未正确配置为 使用“ conda激活”。如果您的外壳是Bash或Bourne变体, 使用
为当前用户启用conda$ echo ". /Users/MY_USERNAME/anaconda3/etc/profile.d/conda.sh" >> ~/.bash_profile
或(对于所有用户)启用conda
$ 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_profile文件中! ^^^
我尝试通过在顶部添加SHELL := /bin/zsh
来更改makefile的外壳,但这不能解决问题。另外,我需要此makefile才能使用计算机的默认外壳程序运行(我的一些队友使用zsh,其他人使用bash)。似乎无论我做什么,我都无法使conda activate
在Makefile中工作。
我该怎么办才能使它正常工作?
答案 0 :(得分:0)
conda activate
设置环境变量。但是,GNU Make
在新产生的外壳程序中调用配方的每一行。您需要在配方的每一行中调用conda activate
。
更好的方法是让makefile执行conda activate
,然后在新激活的环境中重新运行自身,然后再构建目标。
答案 1 :(得分:0)
经过一番搜索,我想出了将此模式添加到我的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 )
答案 2 :(得分:0)
您应该在脚本开头使用|---------------------|------------------|----------------|
| INTERFACE_NAME | RULE_NAME | ERROR_COUNT |
|---------------------|------------------|----------------|
| EMP01 | Invalid dept | 2 |
|---------------------|------------------|----------------|
| EMP01 | Invalid dept | 2 |
|---------------------|------------------|----------------|
| EMP01 | - | 2 |
|---------------------|------------------|----------------|
| DEPT01 | Missing Dept id | 3 |
|---------------------|------------------|----------------|
| DEPT01 | Missing Dept id | 3 |
|---------------------|------------------|----------------|
| DEPT01 | - | 3 |
|---------------------|------------------|----------------|
| Total | - | 5 |
|---------------------|------------------|----------------|
指令。这一切都在同一外壳中运行。
答案 3 :(得分:0)
您需要记住的重要一件事是Makefile
将在单独的子外壳中执行配方的每一行,例如在一行中导出PATH
不会影响下一行Makefile
中的命令所看到的内容!请参阅Makefile manual - Recipe Execution:
当需要执行配方来更新目标时,可以通过为配方的每一行调用一个新的子shell来执行它们,除非
.ONESHELL
特殊目标生效(请参阅使用一个Shell)(实际上,make可能会采用不影响结果的快捷方式。)请注意:这意味着设置shell变量和调用诸如cd之类的设置每个进程本地上下文的shell命令不会影响配方中的以下行。 >