在Python2.7中,如何更改sys.path中路径的优先级?我知道我可以使用PYTHONPATH
环境变量,但这是我将得到的:
$ PYTHONPATH=/tmp python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for i in sys.path:
... print i
...
/usr/local/lib/python2.7/dist-packages/pycuda-2014.1-py2.7-linux-x86_64.egg
/usr/local/lib/python2.7/dist-packages/pytest-2.6.2-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pytools-2014.3-py2.7.egg
/usr/local/lib/python2.7/dist-packages/py-1.4.24-py2.7.egg
/usr/lib/python2.7/dist-packages
/tmp
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
>>>
在/usr/lib/python2.7/dist-packages
和/usr/lib/python2.7
之间添加了/tmp
。
我的目标是让python首先从/usr/local/lib/python2.7/dist-packages
加载包。
这是我想要的:
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.version
<module 'numpy.version' from '/usr/local/lib/python2.7/dist-packages/numpy/version.pyc'>
>>>
如果我通过apt-get install python-numpy
安装python-numpy
。Python将尝试从/usr/lib/python2.7
加载,而不是我编译的那个。
发布于 2016-05-23 06:26:45
如你所知,sys.path
is initialized from
依赖于PYTHONPATH
然而,不幸的是,这只是故事的一部分:setuptools
创建了easy-install.pth
文件,这些文件还会修改sys.path
,最糟糕的是,它们会预先添加包,因此会完全打乱目录的顺序。
特别是(至少在我的系统上),有一个包含以下内容的/usr/local/lib/python2.7/dist-packages/easy-install.pth
:
import sys; sys.__plen = len(sys.path)
/usr/lib/python2.7/dist-packages
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
这会导致/usr/lib/python2.7/dist-packages
甚至被放在PYTHONPATH
之前!
您可以简单地将此文件中的第二行更改为
/usr/local/lib/python2.7/dist-packages
你会得到你想要的优先级。
但是要注意,这个文件可能会被以后的setuptools
调用覆盖或再次更改!
发布于 2018-06-01 01:10:36
我们遇到了几乎相同的情况,并希望扩展@kynan的反应,这是一针见血的。如果您有一个想要克服的easy-install.pth
,但无法对其进行修改(假设您是一个没有超级用户/管理员访问权限的用户),您可以执行以下操作:
- e.g. we use a PYTHON HOME install (setting PYTHONUSERBASE)
- You can do this by installing a package into the user env: `pip install <package> --user`
要解决系统/分发easy-install.pth的问题,请创建
sys.__egginsert
- Create a `$PYTHONUSERBASE/lib/python2.7/site-packages/fix_easy_install.pth`
- Containing: `import sys; sys.__egginsert = len(sys.path);`
这会将sys.__egginsert
设置为指向sys.path
的末尾,包括用户站点路径。当恶意系统/dist easy-install.pth
将其项目插入到系统路径的末尾时。
https://stackoverflow.com/questions/26193193
复制相似问题