我遇到了 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 安装)。依赖命名空间的包没有像 distribute/setuptools 文档中记录的那样与 __init__.py
文件一起安装,但它们的安装包中都真正包含以下声明。
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
现在进入真正的问题。当已经安装了一些相关的命名空间包时,使用命名空间包是否有技巧?
最佳答案
一种解决方案是修改命名空间包的路径以添加您的本地路径。 (如果您在 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 命名空间的项目。
关于python - 使用 Python 命名空间包进行开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237685/