【发布时间】:2019-09-28 04:40:53
【问题描述】:
我有一种情况,同一个 Python 模块在两个不同版本的同一个目录中存在; mymodule.py 和 mymodule.so (我通过 Cython 从第一个获得后者,但这与我的问题无关)。当我使用 Python 时
import mymodule
它总是选择mymodule.so。有时我真的很想导入mymodule.py。我可以暂时将mymodule.so 移动到另一个位置,但如果我同时运行另一个需要导入mymodule.so 的Python 实例,则效果不佳。
问题是如何使import 更喜欢.py 文件而不是.so,而不是相反?
以下是我对解决方案的想法:
我想象使用importlib 执行一些魔术,并可能编辑sys.meta_path。具体来说,我看到sys.meta_path[2] 包含用于导入外部模块的_frozen_importlib_external.PathFinder,即它同时用于mymodule.py 和mymodule.so。如果我可以用类似的PathFinder 替换它,它对文件类型使用反向排序,我会有一个解决方案。
我正在使用 Python 3.7,如果这会影响解决方案。
编辑
请注意,仅读取 mymodule.py 和 exec'ing 它们的源代码行是行不通的,因为 mymodule.py 本身可能会导入其他模块,这些模块再次存在于 .py 和 .so 版本中(我也想导入这些的.py 版本)。
【问题讨论】:
标签: python python-3.x import cython python-import