我正在尝试通过利用 Pythons namespace packages将一个大的(几乎是整体的)Python 项目拆分为多个部分。因此,我将文件解析器提取*.rules
到命名空间包中。Python 将此称为分布。
我遵循了该指南,据我所知它部分有效,但是......
简而言之:在主项目中,单独分布的命名空间包的命名空间是不可见的,因为包搜索首先找到本地包,并不会与来自 的系统包合并site-packages
。
项目结构
这是我的目录/包和模块结构的一部分。
主要项目:
pyIPCMI/ # Git repository root
pyIPCMI/
__init__.py
Common/
__init__.py
File1.py
Compiler/
__init__.py
Vendor1.py
Vendor2.py
setup.py
规则解析器的分布
pyIPCMI.Parser.Rules/ # Git repository root
pyIPCMI/
Parser/
Rules/
__init__.py
Parser.py
setup.py
包说明(安装工具)
主项目是这样打包的:
import setuptools
setuptools.setup(
name="pyIPCMI",
version="1.1.5",
author="Paebbels",
author_email="abc@xyz.de",
description="",
long_description="",
url="https://github.com/Paebbels/pyIPCMI",
packages=setuptools.find_packages(),
classifiers=["License :: OSI Approved :: Apache Software License"],
python_requires='>=3.5',
install_requires=[],
)
嵌入的命名空间是这样打包的:
import setuptools
namespace = ["pyIPCMI", "Parser", "Rules"]
setuptools.setup(
name=".".join(namespace),
version="1.1.4",
author="Paebbels",
author_email="abc@xyz.de",
description="",
long_description="",
url="https://github.com/Paebbels/pyIPCMI.Parser.Rules",
packages=setuptools.find_namespace_packages(
include=[".".join(namespace), ".".join(namespace) + ".*"]
),
namespace_packages=namespace[0:1],
classifiers=["License :: OSI Approved :: Apache Software License"],
python_requires='>=3.5',
install_requires=[],
)
所有发行版都是:
setuptools
使用 Travis-CI打包- 部署到 PyPI,然后
- 使用 .安装在本地计算机上
pip
。
PyPI 的命名空间结构
pyIPCMI
pyIPCMI.Parser.Files
pyIPCMI.Parser.Rules
pyIPCMI.Toolchains
pyIPCMI.Toolchains.Vendor1
pyIPCMI.Toolchains.Vendor2
问题描述
在使用 PyCharm 等主项目进行开发时,本地找到的命名空间优先于来自site-packages
. 此外,这些命名空间不会被合并。因为主项目具有相同的根名称空间pyIPCMI
,所以在本地开发项目中继续搜索,但不搜索site-packages
。
知道如何开发主要项目吗?
请告知需要什么信息来解决这个问题。我试图写下我目前掌握的所有信息。但是这个问题可能需要改进才能得到解决方案。