首页 > 解决方案 > 为什么 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) ✗ 

当我明确地激活虚拟环境时,事情会按预期工作,但是当我在我的项目中并且不这样做时,尽管文档暗示了什么,虚拟环境似乎并没有修改执行。

我是不是误会了什么?

标签: python-3.xpython-venv

解决方案


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

推荐阅读