通过附加到Python路径将虚拟环境加载到Jupyter是一个坏主意吗?

时间:2019-01-29 06:41:08

标签: python jupyter-notebook jupyter pipenv

我目前正在将Jupyter笔记本用于Python和pipenv虚拟环境。我正在使用以下代码作为在Jupyter笔记本中加载虚拟环境的解决方案:

import sys
sys.path = ['./.venv/lib/python37.zip',
            './.venv/lib/python3.7',
            './.venv/lib/python3.7/lib-dynload',
            './.venv/lib/python3.7/site-packages',
] + sys.path

这是不好的做法吗?如果是这样,有什么问题,风险,副作用等?

(请注意,这是有效的,因为我已将pipenv配置为通过echo "export PIPENV_VENV_IN_PROJECT=1" >> ~/.bash_profile在我的工作目录中存储环境)

我怎么到这里的?

我的目标是将Jupyter笔记本用于众多Python(和R)项目,每个项目都有自己的虚拟环境。我遇到了two unsatisfactory solutions,以实现此目标:

  1. 在每个虚拟环境中安装Jupyter。

    • 安装过程缓慢
    • 每次都需要配置扩展名
    • 随着时间的推移安装多个版本会浪费磁盘空间
    • 使用不相关的软件包填充虚拟环境
  2. 在每个虚拟环境中创建一个IPyKernel。

    • 需要在虚拟环境中安装IPyKernel,该环境仍然会安装大多数Jupyter。
    • 再次用不相关的软件包填充环境
    • 需要额外的命令才能向Jupyter注册新内核
    • 要求用户手动命名每个内核
    • 要求用户每次打开笔记本时都选择适当的内核

我的第三个解决方案是更改pipenv的上述配置,因此虚拟环境位于工作目录中。这样,我的通用内核可以使用相同的路径来定位适当的虚拟环境。我在Jupyter中添加了sys.path的适当路径。这是一个可怕的主意吗?

1 个答案:

答案 0 :(得分:0)

如果您要与其他人共享笔记本,并且他们的文件系统没有按照您的确切方式进行布局,那么肯定会弄乱其他人。您能先创建一个新的虚拟环境,然后符号链接到已安装jupyter的虚拟环境吗?