在使用和不使用sudo运行Python时,为什么PYTHONPATH会有所不同?

时间:2014-12-14 06:19:00

标签: python pip environment-variables sudo

我的OSX系统和python出现了问题,谷歌没有修复任何数量的问题。我已经卸载了python的所有痕迹,除了我不应该卸载的OSX系统python包,然后从python.org重新启动了一个新的python,并安装了pip。

现在......不确定下面的这种特殊行为是否属于问题的一部分,但对我来说似乎很奇怪:

我跑了两次python。一次与sudo和一次没有。没有sudo,我无法访问pip。发生了什么事?

$ sudo /Library/Frameworks/Python.framework/Versions/2.7/bin/python
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pip

...然而

$ /Library/Frameworks/Python.framework/Versions/2.7/bin/python
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>>

我已经提到:sudo python runs old python version

我的.bash_profile中没有任何内容,或任何其他配置文件中的任何内容。

我所做的就是以下内容:

export PYTHONPATH=/lib/python2.7/site-packages/

ls $PYTHONPATH返回:

_markerlib          pip             pkg_resources.pyc       setuptools-8.0.1.dist-info  virtualenv.pyc
easy_install.py         pip-1.5.6.dist-info     setuptools          virtualenv-1.11.6.dist-info virtualenv_support
easy_install.pyc        pkg_resources.py        setuptools-7.0.dist-info    virtualenv.py

which pip返回:

/bin/pip

2 个答案:

答案 0 :(得分:2)

sudo会覆盖您的export。它是相同的Python(您可以从它打印的版本信息中轻松判断),但它使用不同的(系统默认值)PYTHONPATH运行。

这是sudo的工作之一;它将环境清理为安全默认值。你可以调整一下,但真正的问题是,你想要完成什么?如果您需要在特定环境中以root运行,请设置virtualenv和/或编写一个包装脚本,该脚本在调度Python之前进行设置。

答案 1 :(得分:1)

比较which pipsudo which pip的输出时,您会得到什么? 在我的系统上,我得到不同的输出。如果你这样做,我不知道如何解决这个问题,但你可以尝试强制sudo&#39; python查看正确的目录:

import sys
sys.path.insert(0, '/lib/python2.7/site-packages/')

import pip