如果我从easy_install安装了软件包,则会sys.path在PYTHONPATH变量中的项之前添加egg .
例如,如果我在当前目录中安装了一个名为foo的egg包以及一个名为foo的包,那么执行以下操作:
PYTHONPATH="." python
>>> import foo
Run Code Online (Sandbox Code Playgroud)
这将使用egg版本foo而不是本地目录.检查sys.path显示鸡蛋放在物品之前PYTHONPATH.这似乎破了.有没有办法覆盖这种行为?
我已经在站点范围内安装了 Pandas 版本 0.12.0,并且用户需要 0.13.0。我告诉他将其安装到他的主目录中,他这样做了,但是当他键入时,import pandas它发现了旧模块。
因此,我决定打印出他的路径sys.path,并按以下顺序注意到这些路径(为了保持简短而删除了其他路径):
[
'',
'/apps/python/2.7.5/lib/python2.7/site-packages/pandas-0.12.0-py2.7-linux-x86_64.egg',
'/home/user/.local/lib/python2.7/site-packages',
'/apps/python/2.7.5/lib/python2.7/site-packages'
]
Run Code Online (Sandbox Code Playgroud)
PYTHONPATH 也出现在 pandas 之后:
[
'',
'/apps/python/2.7.5/lib/python2.7/site-packages/pandas-0.12.0-py2.7-linux-x86_64.egg',
'/usr/lib64', // this is the PYTHONPATH
'/home/user/.local/lib/python2.7/site-packages',
'/apps/python/2.7.5/lib/python2.7/site-packages'
]
Run Code Online (Sandbox Code Playgroud)
什么会导致 pandas-0.12.0 在其他任何东西(甚至是 PYTHONPATH)之前被专门加载?还有其他几个包也表现出相同的行为。所有软件包均已通过pip或通过执行安装python setup.py install;这两种方法都会导致这样的问题吗?我认为我们没有手动编辑任何内容。