如果你使用Anaconda作为你的Python管理系统,而且如果你有不同的conda environment,那么接下来我讲的事情你可能会有同感。
我打算在一个新的conda环境里安装tensorflow,我是这么做的:
(Mac OS X, GPU enabled, Python 2.7)
用下面的代码创建一个新的环境:
1
| $ conda env create -n tensorflow python=2.7
|
之后activate它:
1
| $ source activate tensorflow
|
接着安装tensorflow:
1 2
| (tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0-py2-none-any.whl (tensorflow)$ pip install --ignore-installed --upgrade $TF_BINARY_URL
|
成功之后,我很高兴,所以我二话不说就打开了jupyter notebook:
1
| (tensorflow)$ jupyter notebook
|
结果,系统报错: No module named tensorflow
于是我退出,用1
| (tensorflow)$ which jupyter
|
查看了一下我正在使用的jupyter, 结果令人失望:
1
| /Users/jasontang/anaconda/bin/jupyter
|
根本没有使用tensorflow env里的jupyter,怪不得报错!
可是我明明转换了环境呀,如果转换环境不能转换executable的路径的话,转换环境又有什么用呢?
解决方法
首先运行:
1
| python -m IPython kernelspec install-self
|
然后:
1
| vi /usr/local/share/jupyter/kernels/python2/kernel.json
|
将
1 2 3 4 5 6 7 8 9 10 11
| { "display_name": "Python 2", "language": "python", "argv": [ "/Users/yourname/anaconda/bin/python", <-- Change this line "-m", "ipykernel", "-f", "{connection_file}" ] }
|
改成
1 2 3 4 5 6 7 8 9 10 11
| { "display_name": "Python 2", "language": "python", "argv": [ "python", <-- Change this line "-m", "ipykernel", "-f", "{connection_file}" ] }
|
为什么
首先,要怪的话就怪jupyter的设计。jupyter使用的kernel是根据kernel.json里定义的python路径来选择,而当我们使用source activate tensorflow的时候,这份kernel.json并没有被改变。
当我们将”/Users/yourname/anaconda/bin/python”改成”python”时, 系统会自动去PATH里寻找默认的python executable,这时它会找到环境里的python。