我使用anaconda来管理我的包,并且按照以下方式安装了scikit-learn:
source activate python3
conda install scikit-learn
Fetching package metadata .............
Solving package specifications: .
# All requested packages already installed.
# packages in environment at /Users/overaa/anaconda/envs/python3:
#
scikit-learn 0.19.1 py36hffbff8c_0
现在,如果我直接从命令行开始一个Python会话,
import sklearn
可以按预期工作,并且正确导入了该模块。但是在Jupyter中执行相同的操作会导致 ModuleNotFoundError: No module named 'sklearn'
。我已经检查了很多事情。首先,确保我的jupyter和jupyter-notebook指向正确的环境。
which jupyter
/Users/user_name/anaconda/envs/python3/bin/jupyter
which jupyter-notebook
/Users/user_name/anaconda/envs/python3/bin/jupyter-notebook
所以笔记本电脑检查通过。
然后在命令行python会话中(与我启动笔记本的环境相同):
>>> import sklearn
>>> sklearn.__file__
'/Users/user_name/anaconda/envs/python3/lib/python3.6/site_packages/sklearn/__init__.py'
现在需要确保scikit-learn
已经安装在正确的环境中。
现在需要确认我正在运行相同的版本;
从命令行输入:
>>> print(sys.version)
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
从Jupyter笔记本:
print(sys.version)
3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:04:09
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
比较软件包的路径。
从命令行执行:
import site
print(site.getsitepackages())
['/Users/user_name/anaconda/envs/python3/lib/python3.6/site-packages']
来自 Jupyter 笔记本:
import site
print(site.getsitepackages())
['/Users/user_name/anaconda/envs/python3/lib/python3.6/site-packages']
同样地,对于我的
sys.path
,在命令行中应该这样使用:>>> print(sys.path)
['', '/Users/user_name/anaconda/envs/python3/lib/python36.zip',
'/Users/user_name/anaconda/envs/python3/lib/python3.6',
'/Users/user_name/anaconda/envs/python3/lib/python3.6/lib-dynload',
'/Users/user_name/anaconda/envs/python3/lib/python3.6/site-packages',
'/Users/user_name/anaconda/envs/python3/lib/python3.6/site_packages/setuptools-27.2.0-py3.6.egg']
Jupyter:
print(sys.path)
['', '/Users/user_name/anaconda/envs/python36/lib/python36.zip',
'/Users/user_name/anaconda/envs/python36/lib/python3.6',
'/Users/user_name/anaconda/envs/python36/lib/python3.6/lib-dynload',
'/Users/user_name/anaconda/envs/python36/lib/python3.6/site-packages',
'/Users/user_name/anaconda/envs/python36/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg',
'/Users/user_name/anaconda/envs/python36/lib/python3.6/site-packages/IPython/extensions',
'/Users/user_name/.ipython']
所以,除了命令行版本和Jupyter版本包含setuptools
的目录不同之外,其他都是相同的。我还注意到,scikit-learn
似乎安装在site_packages
子目录中,而不是site-packages
子目录中,这是Jupyter查找模块的位置。所以我尝试了两件事情。首先,在运行我的笔记本之前,在我的.bash_profile中添加了路径到我的JUPYTER_PATH
。
export JUPYTER_PATH="/Users/user_name/anaconda/envs/python36/lib/python3.6/site-packages:$JUPYTER_PATH"
在尝试导入scikit-learn
之前,我还尝试将它直接添加到我的jupyter笔记本中的sys.path
中。
sys.path.append("/Users/user_name/anaconda/envs/python3/lib/python3.6/site_packages")
无论如何,
sklearn
仍然无法在我的笔记本中导入。非常感谢任何关于为什么无法将
scikit-learn
导入到我的Jupyter笔记本中的想法。我还可以检查更多的东西吗?我该如何让它工作起来?我已经尝试了激活/取消激活我的环境、重启内核等等,但都没有成功。
编辑:我没有导入其他软件包时遇到问题,比如
numpy
或scipy
。