繁体   English   中英

为什么在有和没有sudo的情况下运行Python时PYTHONPATH有何不同?

[英]Why is the PYTHONPATH different when running Python with and without 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运行旧的python版本

我的.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

sudo会覆盖您的export 它是相同的Python(您可以从打印的版本信息中很容易看出来),但是它以不同的(系统默认值) PYTHONPATH

这是sudo的工作之一; 它将环境消毒到安全默认值。 您也许可以进行调整,但真正的问题是,您要完成什么? 如果您需要在特定环境下以root身份运行,请设置一个virtualenv和/或编写一个包装脚本,以在分发Python之前进行设置。

比较which pipsudo which pip的输出,会得到什么? 在我的系统上,我得到不同的输出。 如果这样做,我不确定如何解决此问题,但是您可以尝试强制sudo'd python在正确的目录中查找:

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

import pip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM