根据
https:/docs.python.org3tutorialvenv.html。
和
https:/docs.python.org3libraryvenv.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) ✗
当我明确地激活虚拟环境时,事情就像预期的那样工作,但是当我在我的项目中而不这样做时,虚拟环境似乎没有修改执行,尽管文档暗示了什么。
我是不是误解了什么?
文档中明确指出
你不需要特别激活一个环境,激活只是把虚拟环境的二进制目录预先写到你的路径上。激活只是把虚拟环境的二进制目录预先加入到你的路径中去。这样,"python "就会调用虚拟环境的Python解释器,你就可以运行安装的脚本,而不必使用它们的完整路径。然而,所有安装在虚拟环境中的脚本都应该可以在不激活它的情况下运行,并自动与虚拟环境的Python一起运行。
你必须手动添加venv的二进制路径到你的 途径 变量并将其导出。
如果你检查 激活 文件,你可以看到它只是将venv二进制位置添加到你的路径中。
VIRTUAL_ENV="/home/user2/venv"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH