【问题标题】:Module installed with PIP in virtualenv not found在 virtualenv 中未找到使用 PIP 安装的模块
【发布时间】:2018-07-28 01:28:18
【问题描述】:

得到一个非常奇怪的错误。我正在创建一个虚拟环境并使用 pip requirements.txt 文件对其进行初始化,但是当我在激活的环境中运行代码时,虚拟环境解释器声称缺少一些(并且只有一些)模块:

(venv) $ pip list
certifi (2017.7.27.1)
chardet (3.0.4)
decorator (4.1.2)
idna (2.5)
ipython (6.1.0)
ipython-genutils (0.2.0)
jedi (0.10.2)
numpy (1.13.1)
olefile (0.44)
pexpect (4.2.1)
pickleshare (0.7.4)
Pillow (4.2.1)
pip (9.0.1)
prompt-toolkit (1.0.15)
protobuf (3.3.0)
ptyprocess (0.5.2)
Pygments (2.2.0)
PyYAML (3.12)
pyzmq (16.0.2)
requests (2.18.3)
scipy (0.19.1)
setuptools (38.5.1)
simplegeneric (0.8.1)
six (1.10.0)
torch (0.2.0.post3)
torchvision (0.2.0)
tornado (4.5.1)
tqdm (4.15.0)
traitlets (4.3.2)
urllib3 (1.22)
visdom (0.1.5)
wcwidth (0.1.7)
wheel (0.30.0)

所以我仔细检查:

(venv) $ pip install tqdm 
Requirement already satisfied: tqdm in ./venv/lib/python3.6/site-packages
(venv) $ python  
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 13 2017, 12:02:49) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tqdm import tqdm
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'tqdm'

人们建议forcing a reinstall,使用不同的解释器源,然后重新安装。这些都没有奏效。这很神秘。你们中有人见过这样的事情吗?看到类似的未解决问题here

更新:已修复。 H/T to @Riverman 帮助我找到了问题:问题是一个旧的未使用的别名是不久前遗留下来的,虽然 pip 仍然有它自己的指向 python3.6,但 python 命令本身被别名为我躺在某个地方的一些旧的 Anaconda3 版本。别名,我忘记了,不要仅仅重新采购你的 .bashrc 文件就可以了,所以我用有问题的 python 命令运行了unalias,它起作用了!

如果他们能解释为什么会发生这种情况,我仍然很乐意听取他们的意见。我虽然 venv 完全将你与外部环境隔离开来……是不是因为混叠是一种系统级效应,所以它会渗入 venv 中??

【问题讨论】:

    标签: python module pip virtualenv alias


    【解决方案1】:

    在 virtualenv 中时,请发出以下命令:

    • 点冻结
    • 点-V
    • python -V
    • 哪个蟒蛇
    • 哪个点

    在此处分享您的结果以进行分析。我之前也遇到过与 requests 包非常相似的问题,但对我来说,这发生在 Windows 上。

    【讨论】:

    • 输出如下: (venv) $ pip freeze certifi==2017.7.27.1 chardet==3.0.4 decorator==4.1.2 idna==2.5 。 . . requests==2.18.3 tqdm==4.15.0 urllib3==1.22 visdom==0.1.5 wcwidth==0.1.7 (venv) $ pip -V pip 9.0.1 from /home/balloch/software/synth-seg /venv/lib/python3.6/site-packages (python 3.6) (venv) $ python -V Python 3.6.3 :: Anaconda custom (64-bit) (venv) $ which python python: aliased to /home/balloch /anaconda3/bin/python3.6 (venv) $ which pip /home/balloch/software/synth-seg/venv/bin/pip 这很有启发性。没有意识到 anaconda 是别名。想法?
    • 我不是 anaconda 方面的专家,但是 afaik,它使用自己的二进制文件来管理 python 和包以及各种各样的东西。我想你的机器上有多个 python 和 pip 安装,现在它们相互冲突。编辑:我会在 anaconda 的文件夹中寻找一个 pip 二进制文件并直接执行它来安装所需的包。另外,我可能会从我的计算机中删除 anaconda 和 python 以及所有软件包(使用 createdblocate &lt;python,pip,venv,anaconda&gt; 命令来发现它们)并重新开始拥有一个干净的环境。 (也检查你的 bash 个人资料)
    • 这是个好主意,但我不认为删除 all python 发行版是个好主意。人们普遍认为,从 Ubuntu 中删除默认的 python 包会很快导致问题发生,因此通常建议您同时安装。我目前坚持使用 Ubuntu 14.04.5,因为我公司的堆栈只有 2.7.6 和 3.4.3。值得庆幸的是,我们都同意我们将花时间切换到 Ubuntu 18.04...4 月来得不够快
    • 我的评论不是很准确——很抱歉!我的意思是删除默认情况下未安装在您的发行版中的与 python 相关的所有内容,例如 anaconda 和任何以前创建的虚拟环境。不要碰默认的python 2.7.x,它真的可以像你说的那样破坏事情。 Afaik 3.x 未安装 - 默认情况下 - 在 14.04/16.04,但如果您公司的修改包括它(并且它不是来自 anaconda),您不应该触摸它。我的替代想法是手动(不使用 PIP)安装 virtualenvwrapper 并使用 -p /usr/bin/python3 开关创建环境。
    【解决方案2】:

    您使用了 pip(为 Python 2.7 安装),并且您尝试将已安装的包导入 Python3,因此它无法工作。 你应该这样做 pip3 install package-name 。 pip3 为 Python3 安装。使用apt-get install python3-pip 安装 pip3 它会起作用的。

    【讨论】:

    • 我会试一试,但我认为情况并非如此。根据上面代码sn-ps显示的版本,python版本是3.6.4,因为虚拟环境是用命令创建的:virtualenv -p python3.6 venv确认:$ pip --version  pip 9.0.1 from /home/.../venv/lib/python3.6/site-packages (python 3.6)
    • pip 工具仍然会响应 Python 2.7,您需要使用 pip3。让我知道它是否有效。
    • 确认 pip3 不起作用。另外,郑重声明你说的不正确。 pip 工具响应与其关联的默认 python 版本。正如我在之前的评论中展示的那样,通过打印 pip --version,它在输出中显示了它正在使用的 python,在本例中为 3.6 。如果我理解虚拟环境正常工作的方式,当你在其中时,你所说的实际上是不可能的,因为 pip 工具响应 python2.7,就好像你从 python3 构建你的环境一样,这实际上是环境中唯一的python版本...
    • 这个解决方案指向一个绝对错误的方向:在 venv 内部,命令 pip 绑定到 venvs pip。在这种情况下 pip 9.0.1
    【解决方案3】:

    我有一个非常相似的问题:我在一个虚拟环境 (virtualenv) 上工作,并在这个环境中安装了 pandas:

    pip3 install pandas
    

    但是,当我在同样位于此虚拟环境中的 jupyter notebook 上工作时尝试导入此模块时,使用以下命令:

    import pandas as pd
    

    我收到了错误:

    ModuleNotFoundError: No module named 'pandas'
    

    最后,我注意到,即使我是从我的虚拟环境中激活我的 jupyter 笔记本,我也是从我的虚拟环境之外打开 jupyter 笔记本(因为我也在我的所有虚拟环境之外安装了这个模块)。我的解决方案是卸载我的虚拟环境之外的 jupyter,当我再次从所需环境中运行 juypter nb 时,一切正常。

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 2017-08-13
      • 1970-01-01
      • 2019-02-03
      • 2014-01-26
      • 2019-02-12
      • 2023-04-03
      • 2021-04-20
      • 2016-06-13
      相关资源
      最近更新 更多