我是 Python 新手,一直尝试在我的小项目中使用 pip 安装模块,但没有成功。
按照网上的建议,我创建了自己的虚拟环境并导入了我的第一个模块
cowsay
。我绝对可以看到该模块正在我的项目中安装:
但是,当尝试在终端中运行该文件时,我不断收到
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'
我在这里缺少什么?预先感谢!
就命令
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 时是最理想的。
在 venv 中查找 bug 是一件非常痛苦的事情。导致原因的因素有很多,寻找原因就像大海捞针一样。最近我今天不得不再次设置我的 venv,因为它被更新破坏了。以下是有关如何快速解决问题的分步说明。
python -m pip freeze > requirements.txt
。这将创建一个列出所有已安装软件包的文档。您需要这个才能稍后再次安装它们而不会出现任何问题。python -m venv ./venv
这会在项目的根目录中创建一个 venv。python -m pip install -r requirements.txt
这将安装文档“requirements.txt”中的所有软件包现在一切都应该正常工作了。
首先创建虚拟环境 然后,激活它,然后安装包 并使用 pip freeze 查找已安装的软件包,这会创建一个requirement.txt 文件,您可以在其中查看已安装的软件包。 如果该软件包不在requirement.txt中,则表示它尚未安装。
将程序运行为 python3 say.py John
你必须调用 python3 而不仅仅是 python,后面跟上文件名