如何处理相互遮蔽的包?

时间:2014-03-11 16:20:36

标签: python ubuntu package shadowing

我已经通过Ubuntu软件包安装了大部分模块,因此他们已经/usr/lib/python3/dist-packages了。有些太旧或无法通过Ubuntu使用,所以我通过点子安装了它们,并且它们在/usr/local/lib/python3.3/dist-packages中。

到目前为止一切顺利。但是,两者都包含一个包mpl_toolkits,但内容不同。 import mpl_toolkits.basemap尽管存在/usr/local/lib/python3.3/dist-packages/mpl_toolkits/basemap但仍然失败,因为mpl_toolkits中首先找到/usr/lib/python3/dist-packages/mpl_toolkits,其中包含许多模块,但不包含basemap

因此,实际上,分发级mpl_toolkits是自定义安装mpl_toolkits的影子。处理这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

通常情况下,这应该由包__path__属性:

来处理
In [4]: mpl_toolkits.__path__ 
Out[4]: 
['/usr/local/lib/python3.3/dist-packages/mpl_toolkits',
 '/usr/lib/python3/dist-packages/mpl_toolkits']

但是,如果第二个mpl_toolkits已安装 后导入第一个,需要重新加载mpl_toolkits以实现其在文件系统上多个位置的分发。