Chr*_*ris 6 python python-2.7 python-3.x ipython-notebook jupyter
我想配置jupyter以允许我在两个不同的笔记本中同时并行运行python 2.7和3.4内核(或者甚至可以在一个笔记本中从一个切换到另一个).
(1)这可能吗?
我问,因为有人建议在IPython Notebook中同时使用Python 2.x和Python 3.x,这是可能的,但没有提供关于这将如何工作的详细答案.
您还可以在https://try.jupyter.org中看到它看起来非常可行(您甚至可以从一个python 2内核切换到python 3内核).所以我觉得合理地假设它确实可行(但如果我错了请纠正我).
(2)这是怎么做到的?
以前的答案(例如在Open IPython Notebook 2.7和3.4并行中)建议在两个不同的端口启动两个不同的 ipython笔记本服务器.这当然是完全合乎逻辑的和可能的,但不回答我的问题.
我设法安装ipythonpython 2和3.然后我jupyter通过在每个相应的python环境中调用以下内容来显示两个内核:
ipython kernelspec install-self
这kernel.json为我创建了文件,我现在可以选择其中任何一个来创建一个新的笔记本jupyter.kernel.jsonpython 2的示例:
{
"display_name": "Python 2",
"language": "python",
"argv": [
"/usr/local/opt/python/bin/python2.7",
"-m",
"ipykernel",
"-f",
"{connection_file}"
]
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我jupyter从python 2环境(已$PYTHONPATH定义)开始时,我只能运行python 2内核(另一个内核在打开相应的笔记本时会崩溃).同样,当我jupyter从python 3环境(已$PYTHONPATH定义)开始.这通常对我有意义,但我想知道如何启动或配置jupyter允许两个内核从同一个jupyter实例运行,并仍然指定我自己的特定的$PYTHONPATHs来加载我的包.
我认为这是我的实际问题 - $PYTHONPATH在我开始之前预定义jupyter.所以我打电话给:
unset PYTHONPATH
ipython notebook
Run Code Online (Sandbox Code Playgroud)
我现在确实可以从单个jupyter实例运行两个内核(py2和3),但我无法从特定的本地目录加载python包.我想我可以在笔记本内手动执行此操作:
import sys
sys.path.append("/some/path/lib/python2.7/site-packages")
Run Code Online (Sandbox Code Playgroud)
但这真的是我应该这样做的方式吗?或者我可以配置我通常写入$PYTHONPATH其他地方的其他目录(例如该kernel.json文件?
PS:请不要问我为什么需要这个 - 不,我真的不需要它 - 但我仍然想知道这是否可能以及如何实现.
[编辑]
请注意,我不习惯安装一些python管理实用程序(如Anaconda)来完成所有这些工作(除非这是唯一的方法).
小智 1
我在 Anaconda 中安装了 Python 2 和 3,其中 3 是主安装,2 是主安装之后完成的环境安装。默认情况下,当运行“ipython Notebook”时,它仅运行启动它的 shell 中活动的 python 版本。在 Python2 处于活动状态时运行“ipython kernelspec install-self”之后,以及在 Python3 处于活动状态时再次运行“ipython kernelspec install-self”后,无论启动它的 shell 中处于活动状态的 Python 版本如何,IPython Notebook 中都可以使用这两种内核。
鉴于“python2”是我的Python2环境的名称,“activate env”是用于激活名为“env”的环境的anaconda命令,“deactivate”是用于停用当前活动环境(如果有)的命令,这些命令我用来启用此配置的是:
activate python2
ipython kernelspec install-self
deactivate
ipython kernelspec install-self
Run Code Online (Sandbox Code Playgroud)
IPython Notebook 中的 sys.path 会根据当前运行的 Python 版本动态且适当地更改。当它运行Python2时,sys.path是:
['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\envs\\python2\\python27.zip', 'C:\\Anaconda3\\envs\\python2\\DLLs', 'C:\\Anaconda3\\envs\\python2\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\plat-win', 'C:\\Anaconda3\\envs\\python2\\lib\\lib-tk', 'C:\\Anaconda3\\envs\\python2', 'C:\\Users\\tn\\AppData\\Roaming\\Python\\Python27\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Sphinx-1.3.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\cryptography-0.9.1-py2.7-win-amd64.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\setuptools-18.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\IPython\\extensions']
Run Code Online (Sandbox Code Playgroud)
将内核切换到 Python3 后,sys.path 变为:
['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\python34.zip', 'C:\\Anaconda3\\DLLs', 'C:\\Anaconda3\\lib', 'C:\\Anaconda3', 'C:\\Anaconda3\\lib\\site-packages', 'C:\\Anaconda3\\lib\\site-packages\\Sphinx-1.3.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\cryptography-0.9.1-py3.4-win-amd64.egg', 'C:\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\lib\\site-packages\\setuptools-18.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\IPython\\extensions']
Run Code Online (Sandbox Code Playgroud)
PYTHONPATH=C:\Users\tn\Documents\python 包含在两个版本的 Python 的 sys.path 中。
为了根据 IPython Notebook 的 Python 版本自定义 sys.path,可以使用环境变量PYTHONSTARTUP (Python2)(另请参阅PYTHONSTARTUP (Python3))。该变量应包含一个可读的 Python 脚本,该脚本将在交互模式启动期间执行。要与 Python 2 和 3 一起使用,它必须可由两者执行。例如,在 C:\Users\tn\Documents\python 中,我创建了以下名为“start”的脚本,该脚本确定执行该脚本的 Python 主要版本,并将以此结尾的路径附加到 sys.path:
import sys
v = sys.version_info[0]
if v == 2 or v == 3:
sys.path.append(r'C:\Users\tn\Documents\python' + '\\' + str(v))
Run Code Online (Sandbox Code Playgroud)
现在,重新启动 IPython Notebook 时,Python 2 sys.path[-1] 为 C:\Users\tn\Documents\python\2,而 Python 3 为 C:\Users\tn\Documents\python\3。
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |