Setuptools从git子模块安装代码



我正在尝试为PyPi打包一个Python库,其中包含指向外部存储库的几个git子模块。类似于:

MyLibrary
- setup.py
- MyLibrary
- __init__.py
- my_code1.py
- my_code2.py
- submodules
- __init__.py
- git submodule https://www.github.com/external/repository1
- repository1_code.py
- git submodule https://www.github.com/external/repository2
- repository2_code.py

我的setup.py文件看起来像:

from setuptools import setup, find_packages
setup(
name='MyLibrary',
...
packages=find_packages(),
...,
install_requires=["numpy", "scipy"]
)

我遇到的问题是,当我使用pip安装这个库时,我所有的代码和子文件夹都安装得很好,但子模块丢失了;它们没有初始化/拉入,也没有出现在已安装的文件夹中,也没有子模块文件夹或内部代码(例如repository1_code.py(。

在安装代码之前,是否有某种方法可以指示setup.py扩展子模块,即git submodule update --init --recursive

由于问题的顶部注释,一个解决方案是分叉所有子模块,并在所有需要的文件夹中放置__init__.py。但这并不是最佳的,因为我不想派生和修改子模块,而是使用原始模块。

另一种解决方案是不使用find_packages(),而是简单地显式写出子模块中的所有文件夹。这有点不方便,但效果很好,似乎是我迄今为止找到的最好的解决方案。

最新更新