【问题标题】:jupyter notebook shell commands do not echo conda envrionmentjupyter notebook shell 命令不回显 conda 环境
【发布时间】:2018-02-12 01:07:42
【问题描述】:

我一直在使用多个 conda 环境(内核)运行 Jupyter 笔记本。这是通过安装nb_condanb_conda_kernels 完成的。

安装 both 上述软件包并重新启动笔记本服务器后,我似乎可以访问 jupyter 笔记本中的两个 conda 环境。但是,我无法确认底层 shell 是否具有正确的环境。例如,如果我启动两台笔记本服务器,一台使用 Python 2.7,另一台使用 3.6,我会得到 Python 版本的预期答案,但不会得到执行的 shell 命令。

Python 2.7.13:

import sys

print(sys.version)

#succeed evidence for running py < 3 
import commands

commands.getoutput('which python')

输出

2.7.13 |Anaconda custom (64-bit)| (default, Dec 20 2016, 23:09:15) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

'/path/python/anaconda3/envs/py36/bin/python'

在这种情况下,我预计 which python 会生成在 Python 2.7.13 环境中处于活动状态的 python 版本。但我知道返回的路径实际上是 Python 3.6 环境中使用的python(见下文)

Python 3.6:

import sys

print(sys.version)

import subprocess

subprocess.check_output(["which","python"])

输出:

3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:09:58) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

b'/path/python/anaconda3/envs/py36/bin/python\n'

另外,在 Python 3.6 环境中我遇到了这个失败,这是有道理的,因为 commands 模块在 Python 3 中被淘汰了:

# fail (evidence for running py 3.6 env)

import commands

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call      last)
<ipython-input-2-9cbf0185e88f> in <module>()
      1 # fail (evidence for running py 3.6 env)
----> 2 import commands

ModuleNotFoundError: No module named 'commands'

因此,无论哪种情况,which python 的输出都给出了我启动 Jupyter notebook 的环境中的 python 版本。这让我相信,虽然 Python 环境符合预期,但 shell 环境在某种程度上与 Python conda 环境不一致。为什么这是真的?会不会造成问题?

【问题讨论】:

    标签: python jupyter-notebook conda


    【解决方案1】:

    which python 仅在环境变量PATH 中为您提供python 的路径。但不是当前 python 的版本。这取决于您启动 jupyter notebook 的环境。

    例如,您可以在激活source activate py36 的同时在原始终端中运行/path/python/anaconda3/envs/py35/bin/python。在这种情况下,您的 python 版本是 3.5,但which python 仍然会给您/path/python/anaconda3/envs/py36/bin/python。或者你可以运行/path/python/anaconda3/envs/py27/bin/python,那么你的python版本是2.7,而which python会再次给你py36

    【讨论】:

    • 在我的 shell 环境中,通过source activate py27 切换conda 环境的行为会更改PATH,这样python 的调用就会给出正确的二进制文件。我知道其他二进制文件仍然存在并且可以显式执行。但是对于笔记本,我会认为创建/重新启动笔记本时会切换 环境,因此 PATH 应该是一致的。不是这样吗?它可能对依赖于由 conda 环境开关更改的环境变量的其他代码产生影响。
    • 不,事实并非如此。 jupyter 不会修改 PATH 而只是使用不同的 ipkernel。但它真的会像你说的那样有影响吗? conda 只在PATH 前面插入envs/xx/bin。据我所知,它只会影响python
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多