【问题标题】:Environment $PATH different when using venv使用 venv 时环境 $PATH 不同
【发布时间】:2014-02-24 12:41:41
【问题描述】:

我在 Mac(OSX 小牛)上使用 PyCharm 来运行如下所示的简单脚本。它所做的只是打印PATH 变量。我在项目目录中有一个 virtualenv。我在 PyCharm 中添加了一个运行配置,并用不同的 Python 进行了尝试:

# file mytest.py
import os
print "PATH: ", os.environ['PATH']

当我使用系统默认 python (/usr/bin/python) 运行时,它会打印正确的 PATH 值(即我在 .bash_profile 文件中配置的 PATH),它有点长并且包含许多目录.

但是当我选择venv的Python时,路径被缩减为只有:/usr/bin:/bin:/usr/sbin:/sbin:/Users/myname/projects/myproj/venv/bin

如果我从终端窗口运行脚本,则不会发生这种情况。在这种情况下,它显示了系统 python 和 venv python 的正确路径。如果我停用 venv 并运行 venv/bin/python mytest.py,它也不会发生。

有人知道在从 PyCharm 运行并使用 venv 时如何设置正确的 PATH 值吗?

【问题讨论】:

    标签: python macos virtualenv pycharm


    【解决方案1】:

    您可能应该知道所有环境变量都是继承的。 当您在 .bash_profile 中定义环境变量时,它在您的终端(bash)中可用, 并且在将从终端启动的所有进程中(这些进程将是 bash 进程的子进程)。 这就是从终端运行脚本时获得预期值的原因。

    您不是从终端启动 PyCharm,因此它不会继承 PATH。 Python 或 venv 也是如此(它们是从 PyCharm 启动的)。

    要解决您的问题,您有 3 个选项:只需从终端启动 PyCharm 或将 PATH 变量定义从 .bash_profile 移动到会话初始化脚本(PATH 将在系统范围内定义)或在 PyCharm 的运行配置中复制您的 PATH(它有那里有这样的选择)

    祝你好运!

    【讨论】:

    • 是的,就是这样。您的回答与this other one 相结合,帮助我将各个点联系起来,并尽可能避免重复。
    • 如何将 PATH 变量定义从 .bash_profile 移动到会话初始化脚本? PyCharm 的会话初始化脚本在哪里?谢谢
    【解决方案2】:

    我为 SublimeLint 构建了一些东西,它可以在 Python 中计算出你的 shell 的 PATH。

    https://github.com/lunixbochs/sublimelint/blob/st3/lint/util.py#L57

    基本上,它运行$SHELL --login,回显您的路径并对其进行解析。

    要点是:

    import os
    import subprocess
    
    shell = os.path.basename(os.environ['SHELL'])
    output = subprocess.Popen(
        (shell, '--login', '-c', 'echo __SEP__$PATH'),
        stdout=subprocess.PIPE).communicate()[0] or ''
    print output.split('__SEP__', 1)[1].split(':')
    

    【讨论】:

      【解决方案3】:

      我在 Windows 上遇到的问题与大小写有关:这是 PathPATH 之间的区别。

      如果您选择:

      • 编辑配置
        • 环境变量
          • 显示(在右下角)

      这显示了环境变量。在我的系统上没有PATH,只有Path

      定义一个新的PATH 环境变量不起作用,但Path 工作正常。

      【讨论】:

        【解决方案4】:

        在我的情况下有一个解决方法。

        要修改环境变量PATH,我通常只需要在运行配置的环境变量设置中为PYTHONPATH变量添加额外的路径即可。 然后将 PYTHONPATH 添加到 PATH。

        【讨论】:

          猜你喜欢
          • 2022-11-11
          • 2010-10-07
          • 1970-01-01
          • 2021-10-12
          • 2019-12-06
          • 2018-12-17
          • 2015-07-29
          • 2020-07-02
          • 1970-01-01
          相关资源
          最近更新 更多