如何激活子shell中的conda env?

meh*_*meh 4 python bash shebang subshell conda

我写了一个python程序.如果我像这样一个shebang:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

我用以下文件使文件可执行:

$ chmod 755 program.py
Run Code Online (Sandbox Code Playgroud)

我可以像这样运行程序:

$ ./program.py
Run Code Online (Sandbox Code Playgroud)

这是问题所在.我使用conda虚拟环境.当我运行上面的程序时,系统会创建一个不识别活动环境的子shell:

(my_env) $ ./program.py
ImportError: No module named pymongo
Run Code Online (Sandbox Code Playgroud)

如果我这样做,不过......

(my_env) $ python program.py
# blah blah... runs great
Run Code Online (Sandbox Code Playgroud)

如何在子shell中指定正确的环境?可能吗?我想保存我的手指输入六个字符串的努力python.

另一篇文章,在conda管理环境中的Shebangs,简要介绍了这一点,但没有提供正确的答案.它只是说,而不是激活子shell中的环境,继续忽略shebang ...只需使用$ python program.py语法.

Neh*_*ani 15

在您的脚本中,更改...

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

...至:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

激活的conda环境使用的python是${CONDA_PREFIX}/bin/python不是/usr/bin/python

请注意区别?

(root) ~/condaexpts$ which python
/home/ubuntu/condaexpts/m3/bin/python

(root) ~/condaexpts$ /usr/bin/env python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

(root) ~/condaexpts$ source deactivate

~/condaexpts$ which python
/usr/bin/python

~/condaexpts$ /usr/bin/env python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)


mer*_*erv 10

conda run

如果您总是计划从conda定义的 shell 会话运行脚本,那么另一种选择是让 Conda 使用conda run命令加载 env 。在这种情况下,shebang 将是

#!/usr/bin/env conda run -n my_env python
Run Code Online (Sandbox Code Playgroud)

这里的优点是您不需要在调用时激活 env./program.py并且您不必硬编码解释器的位置。

注意:此命令在 Conda v4.6.0(请参阅发行说明)中作为“预览”添加,以解决在 env 中运行命令的问题

  • 这给了我“/usr/bin/env:conda run -n my_env python:没有这样的文件或目录”。 (2认同)