如何在一个项目中创建两个本地Python可安装包?
实现api和models作为可安装包的方案
能不能实现?
完全可以。不管是把api和models作为同一项目的子包,还是做成独立的可安装分发包,都能满足你在tests目录中导入测试的需求。
能否共用现有配置文件?
当然可以共用pyproject.toml和setup.cfg,不需要为每个包单独配置版本,下面是两种实用的配置方式:
方式1:将api和models作为同一项目的子包
这是最简便的方案,把两个包归到同一个顶层项目名下:
- 调整目录结构,在
src下新增顶层项目目录(比如命名为myproject),把api和models移入其中:
src myproject __init__.py api __init__.py class1.py py.typed models __init__.py class2.py py.typed
- 修改
setup.cfg的包配置,让工具自动发现子包:
[options] packages = find: package_dir = = src
或者显式列出要包含的子包:
[options] packages = myproject.api myproject.models package_dir = = src
配置完成后,测试代码里就能通过from myproject.api import class1和from myproject.models import class2直接导入。
方式2:将api和models作为独立可安装包
如果希望两个包能单独发布或安装,也可以在同一配置文件中实现:
在setup.cfg里指定每个包的目录映射:
[options] packages = find: package_dir = api = src/api models = src/models [options.packages.find] where = src
你还可以通过定义extras_require来支持单独安装某个包,比如在setup.cfg中添加:
[options.extras_require] api = models =
这样就能用pip install .[api]单独安装api包,pip install .则安装全部两个包。
版本管理
不需要为每个包单独配置版本,建议在pyproject.toml或setup.cfg中统一设置项目版本,比如在setup.cfg里:
[metadata] name = myproject version = 0.1.0
如果确实需要给两个独立包设置不同版本,也可以在配置文件中分别指定,但同一项目下用统一版本会更易维护。
内容的提问来源于stack exchange,提问作者Duncan Carlmark
相关产品推荐
相关产品推荐

