Poetry包导入报错:AttributeError: module 'my_package'无'transmitter'属性
问题原因分析
问题出在你的Poetry包的pyproject.toml中packages字段的配置方式上:
你当前的配置是:
packages = [ { include = "my_package/__init__.py", from = "." }, { include = "my_package/transmitter/*", from = "." }, ]
这种拆分式的文件包含逻辑,会导致Poetry在构建包时,没有将transmitter目录正确注册为my_package的子模块。虽然site-packages里的文件结构看起来符合预期,但Python模块系统无法识别transmitter是my_package的属性(子模块)——因为包的元数据里没有建立两者的关联关系。
当你执行from my_package.transmitter import UDPTransmitter时,Python会先加载my_package模块,再尝试访问它的transmitter属性,但由于元数据缺失,这个属性不存在,因此抛出AttributeError。而直接导入my_package.transmitter.udp_transmitter可行,是因为Python可以通过文件路径直接定位到目标模块,不需要依赖my_package模块内的属性映射。
解决方法
修改Poetry包的packages配置,改为直接包含整个my_package目录,让Poetry自动识别所有子模块:
packages = [ { include = "my_package", from = "." }, ]
如果包目录直接位于项目根目录下,也可以用更简洁的写法:
packages = ["my_package"]
修改后重新推送你的Git分支,在消费应用中执行poetry update my-package,就能正常使用from my_package.transmitter import UDPTransmitter的导入方式了。
内容的提问来源于stack exchange,提问作者404usernamenotfound
相关产品推荐
相关产品推荐

