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

标签 python pip namespaces packaging namespace-package

我遇到了 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/

相关文章:

python - 为什么FormSet在django2中只保存一个表单的数据

python - 我应该在哪里写入用户特定的日志文件(并且与 XDG 基目录兼容)

python - 使用 pip 时如何设置 distutils 使用的日志级别?

python - XGBoost(免费套餐)的 Amazon Sagemaker ResourceLimitExceeded 错误

python - 解析单位的 Python 字符串

python - ssl错误为什么用pip安装

c++ - 在命名空间中使用指令导致的错误示例

events - 如何在 Laravel 4 中监听命名空间类的事件

c# - 命名空间和类名指南

python - 如何添加字典值?