如何在 Python 库中添加子模块?

How to add submodules in a Python Library?

我创建了一个 python 库,其结构如下所示。

|/library_name
|    |__init__.py
|    |/subpackage
|    |   |__init__.py
|    |   |
|setup.py
|setup.cfg
|LICENSE

现在在pypi中发布时,我看不到随之安装的内部子包。我应该怎么办?外 __init__.py 应该是什么。假设内部 __init__.py 有我写的 类 。有人请帮助如何将子包添加到 python 库。

这是 setup.py 格式

setup(
  name = 'package',         
  packages = ['package'],
  version = '1.0.1',
  license='GNU General Public Version 3',
  description = 'Package is the open source Python Library for solving various AI needs',
  long_description = long_description,
  long_description_content_type = "text/markdown",
  author = ['Vigneshwar K R'],
  author_email = 'mymail@gmail.com',
  url = 'https://github.com/ToastCoder/repo',
  download_url = 'https://github.com/ToastCoder/repo/archive/master.zip',
  keywords = ['ARTIFICIAL INTELLIGENCE', 'TENSORFLOW'],
  install_requires=['tensorflow'],
  classifiers=[
    'Development Status :: 5 - Production/Stable',
    'Intended Audience :: Developers',
    'Intended Audience :: Science/Research',
    'Intended Audience :: Education',
    'Topic :: Software Development :: Build Tools',
    'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
    'Programming Language :: Python :: 3',      
    'Programming Language :: Python :: 3.4',
    'Programming Language :: Python :: 3.5',
    'Programming Language :: Python :: 3.6',
    'Programming Language :: Python :: 3.7',
    'Programming Language :: Python :: 3.8',
    'Programming Language :: Python :: 3.9'
  ],
)

能否分享 setup.py__init__.py 代码?

我看到了两种处理方法:

  • 使来自 lib/submodule 的内容在顶层可用:在 lib/__init__.py 中添加 from submodule import *,然后在 __all__ 中添加每个导入的名称。据我所知,这在任何地方都是不好的做法,但在 __init__.pys

    内部
  • 将子模块目录添加到 setup.py 的 packages 参数中:packages=["lib", "lib.submodule"]

编辑:如我所料,packages parameter, 中缺少 submodule,因此认为不需要。

评论的find_packages选项与将lib.submodule添加到包列表的效果相同,它主要用于大型库,手动添加每个模块都会很痛苦。