【发布时间】:2021-04-20 12:13:58
【问题描述】:
我有 imports.py 包含:
import os as exported_os
和foo.py 包含:
from imports import exported_os
print(exported_os.path.devnull) # works
from imports.exported_os.path import devnull # doesn't
有没有办法使第二次导入工作?我尝试将__path__ 添加到imports.py 并摆弄它,但什么也得不到。
实际用例:os 是 some_library_version_n 和 exported_os 是 some_library_version(我试图避免在不同文件中出现多个 some_library_version_n 实例)。
【问题讨论】:
-
是
path自己的模块(即有一个名为path.py的文件),还是path是具有devnull属性的对象?您的错误看起来可能是后者。 -
@Arne
os.path是一个模块 -
哦,我不知何故没有意识到你在谈论 stdlibs
osmodule.strange。 -
我要放弃了。我试图通过动态更新
sys.modules来找到修复程序,但os特别是一个奇怪的模块,它为了可导入而做一些疯狂的事情。接下来我会尝试将自定义MetaPathFinder添加到sys.meta_path,将import imports.something.x.y.z重定向到__import__("something_else.x.y.z"),但是阅读有关python-importing 的文档会融化我的大脑,所以我将把它留在这个模糊的评论中. -
我什至认为您不需要单独的文件来观察这种行为,对吧?在
imports.py中,您也不能使用from exported_os.path import devnull,我认为这是等效的行为。
标签: python python-3.x python-import python-packaging