python-3.x - 为什么 venv 不自动运行?
问题描述
根据
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) ✗
当我明确地激活虚拟环境时,事情会按预期工作,但是当我在我的项目中并且不这样做时,尽管文档暗示了什么,虚拟环境似乎并没有修改执行。
我是不是误会了什么?
解决方案
Doc明确指出
您不需要特别激活环境;激活只是将虚拟环境的二进制目录添加到您的路径中,以便“python”调用虚拟环境的 Python 解释器,您可以运行已安装的脚本而无需使用它们的完整路径。但是,安装在虚拟环境中的所有脚本都应该可以在不激活它的情况下运行,并自动使用虚拟环境的 Python 运行。
您必须手动将 venv 的二进制路径添加到PATH变量并导出它。
如果您检查激活文件的内容,您可以看到它只是将 venv 二进制位置添加到您的路径中。
VIRTUAL_ENV="/home/user2/venv"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
推荐阅读
- oracle-apex - 如何删除交互式网格中的过滤器?
- python - ssm-state manager-ansible 剧本
- sql - 如何告诉 BigQuery 在我发送查询时不要“检查”我的查询?我一直找不到表
- google-chrome-extension - chrome 扩展 onHeadersReceived 侦听器重定向位置错误
- node.js - 加密存储在环境变量中的密码
- jquery - 为什么 Tailwindcss 不能覆盖 jQuery mobile css for ?
- image - 如何使用未公开的图像在 AMZ 机械土耳其人上创建 HIT?
- node.js - 使用 express-session 对 Express 端点进行单元测试
- javascript - 如何根据数组总和对对象进行排序?反应.js
- c# - CefSharp Chromium winforms Web 浏览器以获取选定的文本或获取其中的光标位置