You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导入包时获取模块而非预期函数的问题排查

问题原因与解决

核心问题出在你的子模块名name.py和要导入的函数名name完全同名,结合Python模块加载的命名空间特性,引发了命名冲突。

  • 你在package/__init__.py里执行from .name import name时,确实会把name.py中的name函数导入到package包的命名空间中。但由于子模块本身就叫name,在一些场景下(比如之前缓存过package.name模块、导入顺序影响),Python的模块查找机制会优先将package.name识别为子模块,而非你导入的函数。
  • 你提到其他函数用相同方式没问题,大概率是那些函数的子模块名和函数名不重复(比如从utils.py导入foo函数),不存在命名冲突,所以包命名空间里的对象不会被模块覆盖。

除了你已知的解决方法,还有两种常见处理方式:

  1. 重命名子模块或函数:把name.py改成name_utils.py,或者把函数name改成get_name,从根源上避免同名冲突。
  2. 在__init__.py里使用别名:修改导入语句为from .name import name as package_name,之后外部代码可以用from package import package_name调用函数,既保留原模块和函数名,又避开冲突。

内容的提问来源于stack exchange,提问作者Runner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:27:18