虚拟环境中“找不到模块错误”

问题描述 投票:0回答:4

我是 Python 新手,一直尝试在我的小项目中使用 pip 安装模块,但没有成功。

按照网上的建议,我创建了自己的虚拟环境并导入了我的第一个模块

cowsay
。我绝对可以看到该模块正在我的项目中安装:

enter image description here

但是,当尝试在终端中运行该文件时,我不断收到

ModuleNotFoundError

(env) sr@python-virtual-env >> pip install cowsay
Collecting cowsay
  Using cached cowsay-5.0-py2.py3-none-any.whl
Installing collected packages: cowsay
Successfully installed cowsay-5.0

(env) sr@python-virtual-env >> python say.py John
Traceback (most recent call last):
  File "/Users/sr/Sites/python-virtual-env/say.py", line 1, in <module>
    import cowsay
ModuleNotFoundError: No module named 'cowsay'

我在这里缺少什么?预先感谢!

python
4个回答
2
投票

就命令

which python pip
的输出而言,是

python: aliased to /usr/bin/python3 
/Users/sr/Sites/python-virtual-env/env/bin/pip

我们可以说您正在运行 python,而不是从您的环境中运行。所以默认情况下它看不到此环境中安装的任何软件包。

删除别名

python
(在 bash 中,命令
unalias python
对于当前会话来说应该足够了)或打印带有前导
\
的命令以忽略别名并在
$PATH
中查找 python,就像这样

$ \python say.py John

注意此命令开头的

\
。但是,如果您已将
python
声明为 shell 函数,则该函数可能会被执行(几乎不可能,但如果某些 shell 这样做怎么办?)。因此,解决问题的最佳方法可能是运行
env python
,如下所示:

$ env python say.py John

重要更新

对这个问题思考了一些时间,我可以给自己一个明确的答案:

env python ...
是直接从
PATH
运行python的唯一方法。

这是模型来看看我为什么这么认为。

假设我们在带有

bash
的 Linux 机器上运行
PATH='/usr/bin:/bin'
和唯一的 python
/usr/bin/python
:

$ bash --version | head -1
GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)
$ export PATH='/usr/bin:/bin'
$ which -a python
/usr/bin/python

确保我们没有任何名为

python
的别名或函数:

$ type -a python
python is /usr/bin/python

现在我们定义一个别名和一个名为

python
:

的函数
$ alias python='echo Running python as an alias; /usr/bin/python'
$ function python(){ echo Running python as a function; python "$@"; }

现在让我们看看

which
type
命令的答案是什么:

$ which -a python
/usr/bin/python
$ type -a python
python is aliased to `echo Running python as an alias; /usr/bin/python'
python is a function
python () 
{ 
    echo Running python as a function;
    echo Running python as an alias;
    /usr/bin/python "$@"
}
python is /usr/bin/python

我们开始吧:

$ python -c 'print("Hello world")'
Running python as an alias
Hello world

$ \python -c 'print("Hello world")'
Running python as a function
Running python as an alias
Hello world

$ env python -c 'print("Hello world")'
Hello world

正如我们所见,在这种情况下,别名优先于函数,并且只有

env python
有助于直接到达
PATH
,这在从本地环境运行 python 时是最理想的。


2
投票

在 venv 中查找 bug 是一件非常痛苦的事情。导致原因的因素有很多,寻找原因就像大海捞针一样。最近我今天不得不再次设置我的 venv,因为它被更新破坏了。以下是有关如何快速解决问题的分步说明。

  1. 转到项目的根目录并激活 venv(如果尚未激活)并运行命令
    python -m pip freeze > requirements.txt
    。这将创建一个列出所有已安装软件包的文档。您需要这个才能稍后再次安装它们而不会出现任何问题。
  2. 关闭 VS Code 并打开命令行。删除你安装的venv。
  3. 在命令行中导航到项目的根目录并执行以下命令
    python -m venv ./venv
    这会在项目的根目录中创建一个 venv。
  4. 在 VS Code 中打开项目。 VS Code 通常会检测到已创建新的 venv 并询问您是否要使用它。 enter image description here回答问题“是”。
  5. 检查 VS Code 右下角是否选择了正确的 python 解释器(您的 venv 中的解释器)。它看起来像这样: enter image description here 如果不是这种情况,请选择正确的口译员。您可以在这里找到如何做到这一点。
  6. 在 VS Code 中打开终端并确保 venv 已启用。
  7. 运行以下命令
    python -m pip install -r requirements.txt
    这将安装文档“requirements.txt”中的所有软件包

现在一切都应该正常工作了。


0
投票

首先创建虚拟环境 然后,激活它,然后安装包 并使用 pip freeze 查找已安装的软件包,这会创建一个requirement.txt 文件,您可以在其中查看已安装的软件包。 如果该软件包不在requirement.txt中,则表示它尚未安装。


0
投票

将程序运行为 python3 say.py John

你必须调用 python3 而不仅仅是 python,后面跟上文件名

© www.soinside.com 2019 - 2024. All rights reserved.