Setuptools从git子模块安装代码

时间:2020-09-14 22:23:44

标签: pip setuptools setup.py pypi distutils

我正在尝试为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吗?

1 个答案:

答案 0 :(得分:-3)

一个解决方案,要感谢该问题的顶部注释,是分叉所有子模块,并将__init__.py放在所有需要的文件夹中。但这并不是最佳选择,因为我宁愿不必进行分叉和修改子模块,而是使用原始模块。

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

相关问题