【问题标题】:virtualenvwrapper install of Jupyter Notebook uses virtualenv python but global pip & packagesJupyter Notebook 的 virtualenvwrapper 安装使用 virtualenv python 但全局 pip 和包
【发布时间】:2019-10-26 07:04:48
【问题描述】:

我有一个 virtualenvwrapper 包装的 virtualenv。我们称之为测试。 Jupyter 是通过我的全局 pip 和 virtualenv 的 pip 安装的。

$ which python
/usr/bin/python
$ which pip
/usr/local/bin/pip
$ which jupyter
/usr/local/bin/jupyter
$ workon test
(test)$ which python
/home/keon/.virtualenvs/test/bin/python
(test)$ which pip
/home/keon/.virtualenvs/test/bin/pip
(test)$ which jupyter
/home/keon/.virtualenvs/test/bin/jupyter

现在,我通过 /usr/local/bin/pip 安装了包 A,通过 /home/keon/.virtualenvs/test/bin/pip 安装了包 B。 (astropy 和 emcee resp.,但我不认为这很重要)

我启动 jupyter notebook(在测试 virtualenv 的 shell 中)。然后我在一个单元格中运行此代码:

import astropy
import emcee

: 并得到以下错误

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-12-43214a4612e2> in <module>()
      1 import astropy
----> 2 import emcee

ImportError: No module named 'emcee'

在单元格中,我使用 !外壳命令:

!which python
!which pip
!which jupyter
!echo "Pip freeze below:\n---------------------"
!pip freeze

输出是

/home/keon/.virtualenvs/ph20/bin/python
/usr/local/bin/pip
/usr/local/bin/jupyter
Pip freeze below:
---------------------
[snip]
astropy==3.0.3

所以我的 python 是 virtualenv 的,但它似乎正在使用全局 jupyter 和 pip。

这个问题似乎只存在于我的一个虚拟环境中。如果我使用不同的,运行前面描述的相同单元格,输出符合预期:

/home/keon/.virtualenvs/test2/bin/python
/home/keon/.virtualenvs/test2/bin/pip
/home/keon/.virtualenvs/test2/bin/jupyter

【问题讨论】:

    标签: python pip jupyter-notebook virtualenv virtualenvwrapper


    【解决方案1】:

    当有多个 Jupyter Notebook 安装(全局和在特定的 virtualenv 中)时,这是一个常见问题。就我的经验而言,如果虚拟环境中没有安装 Jupyter,即使您在激活特定虚拟环境时发出命令,终端也会启动 Jupyter Notebook 的全局安装。因此,请确保 Jupyter 已安装在“测试”环境中,并在“测试”环境激活时发出“jupyter notebook”命令。

    如果上述解决方案不起作用,并且您确定 virtualenv 的 Jupyter 实例正在运行,但它仍然无法检测到也安装在同一 virtualenv 中的特定包,您可以尝试从以下位置安装所需的包使用此处建议的方法在代码中: Installing python module within code

    如果这两个都失败,我建议您创建一个新的 virtualenv,在其中安装 jupyter,在其中安装您需要的其他软件包,然后在 virtualenv 处于活动状态时尝试再次运行 jupyter 实例。

    如果您不习惯使用 virtualenv 包装器管理多个虚拟环境,并且经常遇到此类错误,尤其是使用 jupyter,我建议您使用 Anaconda 并使用 GUI 创建虚拟环境,这样可以提供更简洁的管理系统并确保您的 Jupyter 实例使用正确的 virtualenv。

    【讨论】:

    • 感谢您的评论。由于which jupyter 似乎确实给出了正确的jupyter,我不确定发生了什么。但就像你建议的那样,简单地创建一个新的虚拟环境就可以了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2022-12-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多