使用VENV时的环境$路径不同



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

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

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

但是,当我选择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?

您可能应该知道所有环境变量均继承。当您在.bash_profile中定义环境变量时,它将在您的终端(bash)中可用,在所有终端开始的过程中(这些过程将是狂欢过程的孩子)。这就是为什么您从终端内运行脚本时会获得预期值的原因。

您不是从终端启动pycharm,因此它不会继承路径。Python或Venv也是如此(它们是从Pycharm发射的)。

要解决您的问题,您在这里有3个选项:只需从终端启动Pycharm或Move Path变量从.bash_profile到会话init脚本(路径范围定义)或在Pycharm的运行配置中复制您的路径(它具有那里的这样的选项)

祝你好运!

我为sublimeLint构建了一些东西,这些东西在python中弄清了您的外壳路径。

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(':')

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

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

在Windows上对我的问题是相关的:PathPATH

之间的区别

如果选择:

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

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

定义新的PATH环境变量无法正常工作,但是Path工作正常。

最新更新