微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Setuptools从git子模块安装代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。