jupyter notebook shell命令不回显conda envrionment

时间:2018-02-12 01:07:43

标签: python jupyter-notebook conda

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

安装上述软件包的两个并重新启动笔记本电脑服务器后,我似乎可以访问conda笔记本中的jupyter个环境。但是,我无法确认底层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环境中我遇到了这个失败,这是有道理的,因为在Python 3中删除了commands模块:

# 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笔记本的环境中给出了python的版本。这让我相信,虽然Python环境是预期的,但shell环境在某种程度上与Python conda环境不一致。为什么这是真的?它会引起问题吗?

1 个答案:

答案 0 :(得分:0)

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

例如,您可以在激活/path/python/anaconda3/envs/py35/bin/python的同时在原始终端中运行source activate py36。在这种情况下,你的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