使用特定的 virtualenv 在 Jupyter notebook 中执行 Python 脚本

Posted

技术标签:

【中文标题】使用特定的 virtualenv 在 Jupyter notebook 中执行 Python 脚本【英文标题】:Execute Python script within Jupyter notebook using a specific virtualenv 【发布时间】:2016-02-03 10:36:33 【问题描述】:

我想在 Jupyter 笔记本中执行一个长时间运行的 Python 脚本,这样我就可以破解运行中生成的数据结构。

该脚本有许多依赖项和命令行参数,并使用特定的 virtualenv 执行。是否可以从指定的 virtualenv(与 Jupyter 安装不同)在笔记本中交互式运行 Python 脚本?

谢谢!

【问题讨论】:

不,我不这么认为。 解决问题的另一种方法是使用像 PyCharm 这样的 IDE。只需选择要用于项目的 virtualenv 并添加一些断点。当执行在您的断点处暂停时,您将能够以交互方式运行 python 代码。你也可以看看 pdb (docs.python.org/3.5/library/pdb.html) 【参考方案1】:

这对我有用(非conda python): (MacOS,python 的 brew 版本。如果您正在使用系统 python,您可能(将)需要在每个命令前面加上 sudo

首先激活 virtualenv

如果重新开始,例如,你可以使用 virtualenvwrapper

$pip install virtualenvwrapper
$mkvirtualenv -p python2 py2env 
$workon py2env

# This will activate virtualenv

(py2env)$ 

# Then install jupyter within the active virtualenv
(py2env)$ pip install jupyter

# jupyter comes with ipykernel, but somehow you manage to get an error due to ipykernel, then for reference ipykernel package can be installed using:
(py2env)$ pip install ipykernel

接下来,设置内核

(py2env)$ python -m ipykernel install --user --name py2env --display-name "Python2 (py2env)"

然后启动jupyter notebook(这一步不需要激活venv)

(py2env)$ jupyter notebook
# or
#$ jupyter notebook

在 jupyter notebook 下拉菜单中:Kernel >> Change Kernel >> <list of kernels> 你应该看到Python2 (py2env) kernel

这也使得识别内核的python版本变得容易,并且可以同时维护。

这里是详细文档的链接 http://ipython.readthedocs.io/en/stable/install/kernel_install.html

【讨论】:

好东西,谢谢。我想提一下,我第一次执行 ipykernel 安装步骤时,并没有采取。不知道发生了什么(除了什么都没有)。第二次运行时,我得到内核已经创建的消息。【参考方案2】:

nb_canda 很有用:

conda install nb_conda

所以,你可以使用 conda 虚拟环境创建和选择自己的 python 内核,并在 venv 中管理包

截图

列表项

jupyter notebook 中的 conda 环境管理器 Conda 选项卡允许您直接在 notebook 中管理环境。

更改内核 您还可以使用内核菜单中的更改内核选项来选择在哪个内核中运行笔记本

【讨论】:

【参考方案3】:

让笔记本内核在其他笔记本中可用的更简单的解决方案。

我正在使用 Linux + virtualenv + virtualenvwrapper。如果您使用不同的设置,请将一些命令更改为适当的命令,但您应该明白这一点。

mkvirtualenv jupyter2
workon jupyter2
(jupyter2) pip install jupyter
(jupyter2) ipython kernel install --name "jupyter2_Python_2" --user

最后一条命令创建~/.local/share/jupyter/kernels/jupyter2\ python\ 2/目录

同样的东西 3

mkvirtualenv -p /usr/bin/python3 jupyter3
// this uses python3 as default python in virtualenv
workon jupyter3
(jupyter3) pip install jupyter
(jupyter3) ipython kernel install --name "jupyter3_Python_3" --user

完成后,无论您使用什么环境启动 jupyter,您都应该看到两个内核。 您可以直接在~/.local/share/jupyter/kernels/ 中删除指向内核的链接。 要指定位置,请为ipython kernel install (--help) 提供选项,或者如果您只想从一个笔记本运行多个内核,则只需将目录从~/.local/share/jupyter/kernels/ 复制到~/envs/jupyter3/share/jupyter

【讨论】:

【参考方案4】:

真的很简单,基于documentation

您可以为您的 IPython 笔记本使用 virtualenv。按照以下步骤,其实不需要第一步,只要确保你通过source ~/path-to-your-virtualenv/激活了你的virtualenv

    将 ipython 内核模块安装到您的 virtualenv 中

    workon my-virtualenv-name # 激活你的 virtualenv,如果你还没有 pip install ipykernel

    最重要的一步)现在运行内核“自安装”脚本:

    python -m ipykernel install --user --name=my-virtualenv-name 根据需要替换 --name 参数。

    您现在应该能够在 IPython 笔记本菜单中看到您的内核:Kernel -> Change kernel 并能够切换到它(您可能需要刷新页面才能显示在列表中)。从那时起,IPython 将记住该笔记本使用哪个内核。

【讨论】:

对于第 1 步,您是否使用虚拟环境的脚本文件夹中的 pip 安装 ipython 内核?对于第 2 步,您是否使用虚拟环境的脚本文件夹中的 python.exe 运行脚本?对于第 3 步,您必须从哪个目录运行您的 notebook?【参考方案5】:

@singer 的解决方案对我不起作用。这是有效的:

. /path/to/virtualenv/.venv/bin/activate
python -m ipykernel install --user --name .venv --display-name .venv

参考:Kernels for different environments(官方文档)

【讨论】:

也可以在ipython.readthedocs ipython.readthedocs.io/en/stable/install/kernel_install.html .. 获取最新参考 是的,这是一个最新的参考,但如果文本发生变化,那么我的参考将无效。所以这就是我提供 git 链接的原因。 抱歉没有检查你的链接:(【参考方案6】:

我发现这个链接非常有用:

https://ocefpaf.github.io/python4oceanographers/blog/2014/09/01/ipython_kernel/

确保您将 pip install jupyter 安装到您的 virtualenv 中。如果链接稍后消失,要点如下:

您需要创建一个新内核。您使用 JSON 文件指定内核。您的内核通常位于~/.ipython/kernels。使用您的 virtualenv 名称创建一个目录,并在其中创建您的 kernel.json 文件。例如,我的一条路径看起来像 ~./ipython/kernels/datamanip/kernel.json

这是我的 kernel.json 文件的样子:


  "display_name": "Data Manipulation (Python2)",
  "language": "python",
  "codemirror_mode": 
    "version": 3,
    "name":"ipython"
  ,
  "argv": [
    "/Users/ed/.virtualenvs/datamanip/bin/python",
    "-c",
    "from IPython.kernel.zmq.kernelapp import main; main()",
    "-f",
    "connection_file"
    ]

我不确定 codemirror_mode 对象在做什么,但它似乎没有造成任何伤害。

【讨论】:

不确定您是否仍处于 SO 状态并处于活动状态。您是否有机会提供您提到的要点链接? 我不得不手动将 python 二进制文件的路径更改为我新创建的虚拟环境的路径。

以上是关于使用特定的 virtualenv 在 Jupyter notebook 中执行 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

让 virtualenv 从你的全局站点包中继承特定的包

如何告诉 Python 脚本使用特定版本

如何更改默认的 virtualenv 提示?

用 virtualenv 创建隔离的 Python 运行环境

如何从虚拟环境(virtualenv)启动 python Idle

该和virtualenv说再见吗?