OSX + Eclipse + PyDev - PATH 不正确



尝试使用Eclipse和PyDev(调试)在OSX上运行以下脚本:

#------------------------------------------------------
import os, subprocess
from os.path import join as join_path
def cmd(command):
    print('$ ' + command)
    process = subprocess.Popen(command, shell=True, executable="/bin/bash", stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return process.communicate() + (process.returncode,)

stdout, stderr, error_code = cmd('echo $PATH')  
print(stdout, stderr, error_code)
stdout, stderr, error_code = cmd('echo $PYTHONPATH')  
print(stdout, stderr, error_code)
stdout, stderr, error_code = cmd('which python')  
print(stdout, stderr, error_code)
stdout, stderr, error_code = cmd('which apt-get')  
print(stdout, stderr, error_code)
#------------------------------------------------------

但是$PATH不是我在.bashrc或.profile中设置的,并且我不能运行位于sw/bin中的apt-get。在运行子流程时,我的$PATH似乎被覆盖或设置不正确。波本。

这是我从上面的脚本输出:

$ echo $PATH 
('/usr/bin:/bin:/usr/sbin:/sbinn', '', 0) 
$ echo $PYTHONPATH ('/Applications/eclipse/plugins/org.python.pydev_2.6.0.2012062515/pysrc/pydev_sitecustomize:/Users/bryancdickson/Development/Lootsie/_repos/ap/ap:/Users/bryancdickson/Development/Lootsie/_repos/ap/ap/ap:/sw/bin:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC:/Library/Python/2.7/site-packagesn', '', 0) 
$ which python 
('/usr/bin/pythonn', '', 0) 
$ which apt-get
> ('', '', 1)

PyDev可能独立于bash配置文件中的设置来设置$PATH。

我建议你:

从具有正确PATH设置的bash shell启动PyDev(我认为Eclipse将从shell继承环境)。

在Eclipse中显式地配置PATH(我不知道如何做到这一点的详细信息,请在文档中搜索"环境变量")。

好的,找到了一个简单的问题解决方案。在这里找到了一些好的注意事项:Mac OS X 中的环境变量

从终端启动Eclipse虽然很烦人,但效果很好。从我的终端类型/Applications/eclipse/eclipse和我的环境变量中获取:

$echo$PATH('/sw/bin:/sw/sbin:/usr/bin:/sbin:/usr/local/bin:/usr/X11/bin://usr/local/mysql/bin:sw/bin:/usr\local/mysql/bin:sw-bin:/usr/X11R6/bin','',0)$echo$PYTHONPATH('/Applications/eclipse/plugins/org.python.pydev_2.6.0.2012062515/pysrc/pydev_sitecustomize:/Users/bryancdickson/Development/Lootsie/repos/ap:/Users/bryancdickson/Development/Lootsie/repos/ap/ap/ap:/sw/bin:/System/Library/Frameworks/python.framework/Versions/2.7/lib/python27.zip:/System/Libraries/Frameworks/Pythn.framework/Versions/2.7/lib/python2.7:/System/Lebrary/Frameworks/版本/2.7/lib/python2.7/plat-darwin:/System/Library/Frameworks/python2.7/flat-mac:/System/Library/Frameworks/Pythn2.7/lib/python2.7/plat-mac/lib脚本包:/System/Lbrary/FFrameworks/Python.framework/Versions/2.7/Extras/lib/pyth:/System/Library/Frameworks/spython2.7.framework/Versions/27/lib/python2.7/lib-tk:/SystemLibrary/FFrameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old:/System/Library/Frameworks/python2.7/lib dynload:/System/Library/Frameworks/Pyth.framework/Versions/2.7/Extras/lib/pyon/PyObjC:/Library/Python/2.7/site packages:/sw/bin\n','',0)$which python('/usr/bin/python\n','',0$which apt-get('/sw/bin/apt-get\n','',0)

您可以在以下位置找到内部PyDev首选项:

窗口:首选项:PyDev:解释器-Python

这包括PYTHONPATH系统。

从终端启动Eclipse对我来说适用于Eclipse 4.3,但它不再适用于Eclise 4.5(Mars)

问题是调用子流程时未正确设置PATH变量。Popen

解决方法是使用os.environ 将真实的PATH添加到环境中

import os
os.environ['PATH'] = os.environ['PATH']+':'+os.getenv('PATH')

这对我来说很有效(我只需要在Python解释器的环境中添加变量PATH及其值,请参阅首选项(Preferences->PyDev->Interpreters->Python Interpreter->Environment)

最新更新