4

我在使用 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 安装)。依赖命名空间的包没有__init__.py像分发 / setuptools 文档中记录的那样与文件一起安装,但它们都在其安装包中真正包含以下声明。

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

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

4

1 回答 1

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)

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

于 2012-06-28T16:45:14.910 回答