如何忽略〜/ .local / lib / python2.7 / site-packages中的python模块?

时间:2016-12-28 10:27:13

标签: python python-2.7 ubuntu python-dateutil

我在dateutil目录中有一个python包~/.local/lib/python2.7/site-packages,在/usr/lib/python2.7/dist-packages/dateutil目录中有一个。当我尝试从kalibr(相机校准工具,我下载了CDE)运行可执行文件时,来自rrule.py dateutil包中的~/.local/lib/python2.7/site-packages会引发错误&#34 ; ImportError:没有名为fractions"的模块。我可以通过移除所述dateutil包(s.t.它使用/usr/lib/python2.7/dist-packages/dateutil中的那个)来运行kalibr但我担心这会对其他项目产生一些影响。

所以我认为这里的基本问题是python更喜欢dateutil中的~/.local/lib/python2.7/site-packages包而不是/usr/lib/python2.7/dist-packages/dateutil中的{。}}。

如何让python更喜欢后者?

(我正在使用Ubuntu 16.04)

2 个答案:

答案 0 :(得分:1)

我不认为有一种方法可以选择在每个软件包的基础上从哪个目录加载软件包,但是您可以更改Python查找软件包的顺序。该顺序反映在sys.path中。默认的软件包搜索路径受site-specific files的影响,但主要是:

  1. 当前目录。
  2. PYTHONPATH环境变量中列出的目录。
  3. Python随附的标准库。
  4. dist-packages下的~/.local目录(user site-packages directory)下的pip install --user目录。您可以通过设置环境变量PYTHONUSERBASE来更改此目录的路径,并通过将PYTHONNOUSERSITE设置为非空值来完全禁用该路径。
  5. dist-packages下的/usr/local目录,pip install是安装目录的地方。

因此,如果需要首先遍历目录,则可以将其放在PYTHONPATH中。就您而言,很有可能仅禁用~/.local来运行kalibr。

env PYTHONNOUSERSITE=1 kalibr

要查看包搜索路径,请运行

python -m site

(所有这些同样适用于Python3。)

(通常,~/.local下的软件包优先于/usr下的软件包是正确的选择。理想情况下,软件包始终向后兼容,如果遇到不兼容的情况,则只需安装~/.local下带有pip install --user的最新版本。但是在现实世界中,这并不总是可行的。)

答案 1 :(得分:-1)

有关更改PYTHONPATH和默认模块搜索顺序的信息,请参阅the answers here。您还应该检查您的脚本,看它是否修改了PYTHONPATHsys.path