python - 为什么在使用和不使用 sudo 运行 Python 时 PYTHONPATH 不同?

标签 python pip environment-variables sudo

我的 OSX 系统和 python 出了 pip 问题,谷歌搜索都没有解决。我已经卸载了 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

最佳答案

sudo 覆盖您的export。它是相同的 Python(正如您可以从它打印的版本信息中轻松看出的那样),但它以不同的(系统默认)PYTHONPATH 运行。

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

关于python - 为什么在使用和不使用 sudo 运行 Python 时 PYTHONPATH 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466862/

相关文章:

python - 我越来越需要多个值来解压值错误

python - 在服务器中使用 twilio 时出现导入错误 : No module named twilio. 休息

python - 无法为 Python 2.7 获取 SFML

php - 在 PHP 5.2.x 中使用 Docker 环境变量

Python Tkinter 使用 PIL 将 Canvas 保存为图像

python - 如何正确处理异常?

vim - 使用 gvim 在内部修改 PATH?

python - 从环境变量中获取参数

python - 如何通过 Google App Engine 从 eBay Finding API 获取数据(项目)?

python - 如何使用 pip 模块列出服务器上的版本?