如何将外部包添加到与本地目录相同的命名空间?

时间:2014-11-19 21:12:32

标签: python python-2.7 pip virtualenv

初始目录结构:(假设目录中的__init__.py个文件)

project/
  ▾ lib/
     ▸ dir/
     ▸ package

我需要在其他项目中重用lib.package,因此我为它创建了一个python包并删除了该目录。但是现在以lib.package的身份安装它我无法从项目的根目录导入它,因为它有lib目录导致命名空间冲突。

最终结构:

▾ project/
  ▾ lib/
     ▸ dir/

在virtualenv中安装了一个名为lib.package的包。

▾ lib/
  ▸ package/
   __init__.py

我查看了pkgutil.extendpath,但是将其添加到__init__.py python包的lib.package没有帮助。有没有什么方法可以在同一个命名空间lib中添加本地和virtualenv安装的包?

1 个答案:

答案 0 :(得分:0)

在Python 2.7中,最好通过在应用程序的代码库中选择一个唯一或至少可导入的依赖项名称来避免此问题,而无需操作路径等。我认为Python 3.4的情况有所改善,但我在这里并不完全确定。

此外,我遇到了同样的问题并且决定使用唯一的名称是出于另一个原因:当你想弄清楚模块的来源时,当所有内容都在{{1}下命名时,它会非常困难}}。这意味着该模块可以来自依赖项以及本地应用程序。这也意味着我可以简单地查看一个导入行,并且在任何时候都知道它是来自我自己的应用程序代码库,我自己的依赖项之一还是外部依赖项。