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

同一目录下foo.so与foo.py共存时Python导入优先级问题

Python导入优先级:.so vs .py 文件

嘿,这个问题其实挺常见的,直接给你结论:Python会自动优先加载.so这类编译后的扩展模块,完全不用特意重命名你的foo.py文件。

具体来说,Python的模块查找机制是有明确优先级的:当你执行import foo时,解释器会按以下顺序查找可用模块:

  • 首先找编译好的二进制扩展(比如Linux/macOS下的.so,Windows下的.pyd)
  • 然后才会去查找纯Python的.py文件
  • 最后还会找.pyc字节码文件

所以只要你的foo.so和foo.py在同一个目录里,Python会直接加载.so版本,完全不会碰.py文件——除非.so不存在,才会 fallback 到.py。

不过有个小坑要提醒你:如果在生成foo.so之前,你已经导入过foo.py,Python会把模块对象缓存到sys.modules字典里。这时候就算你生成了.so,不重启解释器的话,还是会用之前缓存的纯Python模块。解决方法也很简单,重启一下Python进程就行。

要是你想确认到底加载的是哪个版本,也可以用一行代码验证:

import foo
print(foo.__file__)

如果输出的是foo.so的路径,就说明确实优先用了扩展模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:32:52