PyPI分仓包命名空间导入及单仓包拆分安装问题咨询
问题1解答
可以实现,采用Python命名空间包方案即可,无需合并两个代码仓库,也不需要统一为单个PyPI项目:
你需要对两个包的目录结构做如下调整:
- 两个包都去掉顶层
mylib目录下的__init__.py文件,这是隐式命名空间包的要求 - mylib-foo的目录结构调整为:
mylib_foo_root/ ├── pyproject.toml └── mylib/ └── foo/ ├── __init__.py # 其余foo模块的代码文件
- mylib-bar的目录结构调整为:
mylib_bar_root/ ├── pyproject.toml └── mylib/ └── bar/ ├── __init__.py # 其余bar模块的代码文件
两个包各自独立打包上传到PyPI后,用户同时安装两个包时,Python会自动把两个mylib目录下的内容合并到同一个命名空间中,支持import mylib.foo、import mylib.bar的导入方式,互不冲突。
问题2解答
可以实现,你可以在同一个代码仓库中配置多个独立的打包项,分别生成三个PyPI包上传即可:
- 仓库目录结构参考:
mylib_root/ ├── pyproject.toml # 可以写多个打包配置,也可以拆分不同的toml文件 └── mylib/ ├── foo/ │ └── __init__.py └── bar/ └── __init__.py
- 分别为
mylib-foo、mylib-bar、mylib配置打包规则:mylib-foo的打包配置仅包含mylib/foo目录下的代码mylib-bar的打包配置仅包含mylib/bar目录下的代码mylib全量包的配置包含两个子目录的代码,同时在依赖中声明mylib-foo和mylib-bar即可
实现后完全符合要求:用户仅安装mylib-foo时,mylib.bar模块不存在,导入会直接抛出ModuleNotFoundError。
内容的提问来源于stack exchange,提问作者Carlos Adir
相关产品推荐
相关产品推荐

