我正在尝试构建一个用于分发的Python包,其中包含两个独立的模块(
module1
和module2
),但具有非标准目录布局。
这两个模块包含在不同的存储库中(
module1-repo
和module2-repo
),并且都具有标准布局。但是,我想将 module2
的源代码作为 git 子模块包含在 module1-repo
中。
如何构建这个包?
module2-repo
的文件/目录结构(它是我想保持同步的另一个存储库的分支)。module1-repo
的目录结构。module2
作为 module1
的子模块。我希望将它们都作为顶级包。(当前)目录结构是:
module1-repo
├── pyproject.toml
├── module1
│ ├── __init__.py
│ ├── ...
└── module2-repo (git submodule)
├── setup.py
└── module2
├── __init__.py
└── ...
pyproject.toml 是(基于 Poetry 文档):
[tool.poetry]
name = "module1"
...
packages = [
{ include = "module1" },
{ include = "module2/*.py", from="module2"},
]
...
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
这将构建一个具有以下结构的包:
module1.tar.gz
├── LICENSE.txt
├── module1
│ ├── __init__.py
│ └── ...
├── PKG-INFO
├── pyproject.toml
├── README.md
└── module2
└── module2
├── __init__.py
└── ...
但是,这不会正确导入
module2
,因为有一个额外的子目录。
由于
module2-repo
似乎已经是一个发行包(假设它包含顶级 setup.py
文件,因此您真正想要的可能是将 module2-repo
声明为新发行版的依赖项。
如果是这种情况,您只需将
module2-repo
列为 git 要求:
[tool.poetry.dependencies]
module2-distribution = { git = "https://git.example.com/module2-repo.git", rev = "abcd1234" }