首先不加载用户模块(Python)

时间:2014-06-10 15:48:46

标签: python pip

我在站点范围内安装了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'

]

PYTHONPATH也出现在大熊猫之后:

[
    '',
    '/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'

]

什么会导致pandas-0.12.0被特别加载到其他任何东西,甚至是PYTHONPATH?还有其他几个包也表现出相同的行为。所有包都已由pippython setup.py install安装;会不会导致这样的问题?我认为我们没有手动编辑过任何东西。

1 个答案:

答案 0 :(得分:1)

通常,模块搜索路径文档列出了Python导入源的优先级:https://docs.python.org/2/tutorial/modules.html#the-module-search-path。根据这一点,PYTHONPATH就在当前工作目录之后。

非常确定pip安装包的高优先级来自site-packages目录中的某些pth文件(但是,我无法快速找到这些pth文件的优先级。到PYTHONPATH)。查看https://docs.python.org/2/library/site.html,了解这些文件的工作原理。有一个建议,可以解决你的问题:

  

此模块在初始化期间自动导入。该   使用解释器的-S选项可以抑制自动导入。

PYTHONPATH幸存-S(使用Python 2.7.3测试):

$ export PYTHONPATH="FOO"
$ python -S
>>> import sys
>>> "FOO" in sys.path
True

我发现如果您还需要site.py设置的路径中的包,则此解决方案存在问题。但是,在这种情况下,仔细调整PYTHONPATH仍然会有所帮助。

编辑:这看起来像是easy_install / setuptools / distribute的长期问题。众所周知,这些可能 prepend sys.path,有效地覆盖PYTHONPATH,这通常是不受欢迎的行为,请参阅https://bugs.launchpad.net/ubuntu/+source/distribute/+bug/821000。我不确定当前的pip和分发是否还有这个bug,也许你应该更新到这些的最新版本。