我正在尝试为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()
,而是简单地显式写出子模块中的所有文件夹。这有点不方便,但效果很好,似乎是我迄今为止找到的最好的解决方案。