我在mac(OSX mavericks)上使用PyCharm来运行如下所示的简单脚本。它只是打印PATH
变量。我在项目目录中有一个virtualenv。我在PyCharm中添加了一个Run Configuration,并尝试使用不同的Pythons:
# 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的正确PATH。如果我停用venv并运行venv/bin/python mytest.py
,也不会发生这种情况。
任何人都知道如何在从PyCharm运行并使用venv时设置正确的PATH值?
答案 0 :(得分:16)
您应该知道所有环境变量都是继承的。 在.bash_profile中定义环境变量时,它在您的终端(bash)中可用, 以及将从终端启动的所有进程(这些进程将是bash进程的子进程)。 这就是您在终端内运行脚本时获得预期值的原因。
您不是从终端启动PyCharm,因此它不会继承PATH。 Python或venv也是如此(他们是从PyCharm发起的)。
要解决您的问题,您可以在此处选择3个选项:从终端启动PyCharm或将PATH变量定义从.bash_profile移动到会话初始化脚本(PATH将在系统范围内定义)或在PyCharm的运行配置中复制PATH(它具有那边有这样的选择)
祝你好运!答案 1 :(得分:1)
我为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(':')
答案 2 :(得分:0)
我在Windows上的问题与案例有关:它是Path
和PATH
之间的区别。
如果您选择:
这显示了环境变量。在我的系统上,没有PATH
,只有Path
。
定义新的PATH
环境变量不起作用,但Path
工作正常。
答案 3 :(得分:0)
在我的案例中有一个解决方法。
要修改环境变量PATH
,我通常只需要在运行配置的环境变量设置中为PYTHONPATH
变量添加额外的路径。
然后将PYTHONPATH添加到PATH。