如何使setup.py在子目录中包含一个包



我有一个库git-reosub_lib,由于各种原因,我无法直接发布到pypi存储库。相反,我使用它作为另一个库main_lib的git子模块,其结构如下:

my_repo/
setup.py
main_lib/
__init__.py
sub_lib/  # a git submodule
setup.py
sub_lib/
__init__.py

main_lib需要import sub_lib,那么我如何配置my_reposetup.py以将main_libsub_lib都包含为包?特别是,是否可以让setup.py包含子目录中的包(因为它在sub_lib/sub_lib/中(?

当前设置.py:

from setuptools import setup, find_packages
setup(
name='main-lib',
...,
packages=find_packages(exclude=['tests*']),
package_data={'main_lib': ['py.typed'], 'sub_lib': ['py.typed']},
)

还是使用符号链接来解决这个问题更好?

我能够使用符号链接:

my_repo/
setup.py
main_lib/
__init__.py
sub_lib_repo/  # a git submodule
setup.py
sub_lib/
__init__.py
sub_lib -> ./sub_lib_repo/sub_lib

在我的特殊情况下,我需要sub_lib也是main_libpip子模块,我可以使用第二个符号链接:

my_repo/
setup.py
main_lib/
__init__.py
sub_lib -> ../sub_lib_repo/sub_lib
sub_lib_repo/  # a git submodule
setup.py
sub_lib/
__init__.py
sub_lib -> ./sub_lib_repo/sub_lib

通过这种方式,一旦安装了main_lib,像from main_lib.sub_lib.foo import bar这样的东西就可以工作,而像from sub_lib.foo import bar这样的东西则可以工作(在sub_lib中进行必要的导入(。无需更改setup.py

最新更新