我有一个库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_repo
的setup.py
以将main_lib
和sub_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_lib
的pip子模块,我可以使用第二个符号链接:
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
。