我一直在运行具有多个conda环境(内核)的Jupyter笔记本。这是通过安装nb_conda
和nb_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环境不一致。为什么这是真的?它会引起问题吗?
答案 0 :(得分:0)
which python
仅为您提供环境变量python
中PATH
的路径。但不是当前的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
。