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