【问题标题】:Why isn't venv running automatically? [duplicate]为什么 venv 不自动运行? [复制]
【发布时间】: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。同样,您可以在不激活环境的情况下安装 deloreanpath/to/project/venv/bin/python -m pip install deloran.
  • 这意味着通过更新您的 PATH shell 变量,激活可以更轻松地运行正确的 Python 可执行文件。如果不激活 venv,则必须包含可执行文件的路径,所以venv/bin/pythonvenv/bin/pip,而不是pythonpip 等。

标签: python-3.x python-venv


【解决方案1】:

文档明确指出

您不需要特别激活环境; 激活只是​​将虚拟环境的二进制目录添加到您的路径,以便“python”调用虚拟环境的 Python 解释器,您可以运行已安装的脚本而无需使用其完整路径。但是,安装在虚拟环境中的所有脚本都应该可以在不激活它的情况下运行,并自动使用虚拟环境的 Python 运行。

您必须手动将 venv 的二进制路径添加到您的 PATH 变量并导出它。

如果您检查 activate 文件的内容,您可以看到它只是将 venv 二进制位置添加到您的路径中。

VIRTUAL_ENV="/home/user2/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

【讨论】:

    【解决方案2】:

    您需要调用虚拟环境的bin 目录(或Windows 上的Scripts)中的Python 二进制文件:

    path/to/project/venv/bin/python testing.py
    

    同样,您也可以在不激活环境的情况下安装 delorean

    path/to/project/venv/bin/python -m pip install delorean
    

    这适用于虚拟环境的 bin(或 Windows 上的 Scripts)目录中的任何二进制文件,例如使用 pip:

    path/to/project/venv/bin/pip install delorean
    

    这应该适用于大多数情况。否则,您可能需要自己进行激活脚本所做的环境变量修改。应该类似于将VIRTUALENV 设置为/absolute/path/to/venv 并将/absolute/path/to/venv/bin 附加到PATH

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2021-12-09
      • 2020-01-21
      • 2019-05-25
      • 1970-01-01
      相关资源
      最近更新 更多