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

问题描述 投票:0回答:3

我的 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
python pip environment-variables sudo
3个回答
2
投票

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

这是

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


1
投票

比较

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

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

import pip

0
投票

鱼:

sudo env PYTHONPATH=(echo $PYTHONPATH) python

重击:

sudo env PYTHONPATH=$(echo $PYTHONPATH) python

这会评估当前环境中的 $PYTHONPATH 并将其插入到

env
命令中。也许有更简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.