使用Python命名空间包进行开发

时间:2012-06-28 03:27:12

标签: python namespaces packaging pip

我遇到了python命名空间包的问题,​​我想知道什么是好的解决方案。

我的项目结构类似于以下

project_name/ext/app_ext

这是我正在研究的项目。它的依赖项也在同一名称空间中。

project_name/ext/base_ext
project_name/ext/other_dependency

我正在研究django应用程序中的“app_ext”命名空间包。但是,我遇到了收到no module named app_ext

的问题

我认为它与如何安装依赖命名空间包(我正在使用PIP安装)有关。依赖命名空间包未随{/ 1}}文件一起安装,如distribute / setuptools文档中所述,但所有包都在其安装包中真正包含以下声明。

__init__.py

现在回答真正的问题。当已经安装了一些相关的命名空间包时,是否有使用命名空间包的技巧?

1 个答案:

答案 0 :(得分:0)

一种解决方案是修改命名空间包的路径以添加本地路径。 (如果你在Django工作,你可以在settings.py中添加如下代码片段。)

from os import path
import sys

PACKAGE_NAMESPACE = ["project_name", "ext"]
VIRTUAL_PACKAGE = '.'.join(PACKAGE_NAMESPACE)
__import__(VIRTUAL_PACKAGE)
local_package = path.abspath(path.join(*PACKAGE_NAMESPACE))
sys.modules[VIRTUAL_PACKAGE].__dict__["__path__"].insert(0, local_package)

此方法也用于tiddlywebplugins命名空间的tiddlyweb项目。