我正在使用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上对我的问题是相关的:Path
和PATH
。
如果选择:
- 编辑配置
- 环境变量
- 显示(在右下角)
- 环境变量
这显示了环境变量。在我的系统上没有PATH
,只有Path
。
定义新的PATH
环境变量无法正常工作,但是Path
工作正常。