如何通过Poetry将子文件夹打包为包,简化导入路径?
如何配置Poetry包以支持
import package_folder.client导入? 问题背景
项目结构如下(省略__init__.py和py.typed文件):
folder |-pyproject.toml |-package_folder |-other_file.py |-api_folder |-client.py
当前pyproject.toml配置:
[tool.poetry] packages = [ { include = "package_folder/api_folder"} ]
此时生成的whl包要求使用者通过import package_folder.api_folder.client导入,但希望支持import package_folder.client的导入方式。尝试以下配置时出现错误:
packages = [ { include = "api_folder", from = "package_folder", to = "package_folder" } ]
错误信息:
The Poetry configuration is invalid: - data.packages[0] must not contain {'to'} properties
解决方案
方法1:通过包的__init__.py调整导入路径(推荐)
这是Python包的常规做法,无需修改Poetry配置,只需在package_folder/__init__.py中添加导入语句:
# package_folder/__init__.py from .api_folder import client
这样使用者就可以直接通过import package_folder.client或者from package_folder import client来导入模块。
方法2:修改Poetry的packages配置(直接调整包结构)
Poetry的packages配置不支持to属性,你可以通过指定具体文件并设置from路径,将client.py直接打包到package_folder目录下:
[tool.poetry] packages = [ { include = "package_folder" }, { include = "client.py", from = "package_folder/api_folder" } ]
注:部分旧版本Poetry可能仍不支持该写法,若出现问题优先使用方法1。
内容的提问来源于stack exchange,提问作者simpleCoder
相关产品推荐
相关产品推荐

