我在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)
答案 0 :(得分:1)
我不认为有一种方法可以选择在每个软件包的基础上从哪个目录加载软件包,但是您可以更改Python查找软件包的顺序。该顺序反映在sys.path
中。默认的软件包搜索路径受site-specific files的影响,但主要是:
PYTHONPATH
环境变量中列出的目录。dist-packages
下的~/.local
目录(user site-packages directory)下的pip install --user
目录。您可以通过设置环境变量PYTHONUSERBASE
来更改此目录的路径,并通过将PYTHONNOUSERSITE
设置为非空值来完全禁用该路径。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。您还应该检查您的脚本,看它是否修改了PYTHONPATH
或sys.path
。