【发布时间】:2020-05-24 14:22:10
【问题描述】:
根据
https://docs.python.org/3/tutorial/venv.html
和
https://docs.python.org/3/library/venv.html
您不需要在运行脚本之前显式激活创建的虚拟环境:
“您不需要特别激活环境;激活只是将虚拟环境的二进制目录添加到您的路径中,以便“python”调用虚拟环境的 Python 解释器,您可以运行已安装的脚本而无需使用它们的完整但是,安装在虚拟环境中的所有脚本都应该可以在不激活的情况下运行,并自动使用虚拟环境的 Python 运行。”
但是,情况似乎并非如此。
➜ Python git:(master) ✗ mkdir project
➜ Python git:(master) ✗ python3.8 -m venv project/venv
➜ Python git:(master) ✗ echo """import delorean
print(\"Hello\")""" > project/testing.py
➜ Python git:(master) ✗ source project/venv/bin/activate
(venv) ➜ Python git:(master) ✗ pip3.8 install delorean
Collecting delorean
...
Running setup.py install for delorean ... done
Successfully installed babel-2.8.0 delorean-1.0.0 humanize-2.4.0 python-dateutil-2.8.1 pytz-2020.1 six-1.15.0 tzlocal-2.1
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(venv) ➜ Python git:(master) ✗ python3.8 project/testing.py
Hello
(venv) ➜ Python git:(master) ✗ deactivate
➜ Python git:(master) ✗ cd project
➜ project git:(master) ✗ python3.8 testing.py
Traceback (most recent call last):
File "testing.py", line 1, in <module>
import delorean
ModuleNotFoundError: No module named 'delorean'
➜ project git:(master) ✗
当我明确地激活虚拟环境时,事情会按预期工作,但是当我在我的项目中并且不这样做时,尽管文档暗示了什么,虚拟环境似乎并没有修改执行。
我是不是误会了什么?
【问题讨论】:
-
据我所知,您需要从虚拟环境的
bin目录中调用 python 二进制文件:path/to/project/venv/bin/python testing.py。同样,您可以在不激活环境的情况下安装 delorean:path/to/project/venv/bin/python -m pip install deloran. -
这意味着通过更新您的 PATH shell 变量,激活可以更轻松地运行正确的 Python 可执行文件。如果不激活 venv,则必须包含可执行文件的路径,所以
venv/bin/python或venv/bin/pip,而不是python和pip等。