我有一个程序(如宏),它在父程序中运行,并从该程序导入一个API模块(让我们称它为foo)。问题是,该模块只存在于该程序中,所以我不能在软件之外运行拟多姆,因为脚本会抛出一个ReferenceError。为了帮助我自己的开发,我在我的项目目录中创建了一个类型存根文件foo.pyi。如果导入失败,我想要做的是将该类型存根导入为一个普通Python文件,以提供虚拟函数和属性。类似于:
try:
import foo
except ImportError:
from . import foo.pyi但是,这会引发一个错误,因为它试图从项目文件夹中不存在的pyi库中导入foo。我唯一能想到的其他选择是拥有一个.pyi文件的相同副本,比如"dummy_foo.py“,但是我必须在一个回购中维护同一个文件的两个副本。我不想那样做。
发布于 2022-06-22 20:23:11
我写了一段时间以前,我认为应该仍然有效:
import importlib
def import_stub(stubs_path, module_name):
sys.path_hooks.insert(0,
importlib.machinery.FileFinder.path_hook(
(importlib.machinery.SourceFileLoader, ['.pyi']))
)
sys.path.insert(0, stubs_path)
try:
return importlib.import_module(module_name)
finally:
sys.path.pop(0)
sys.path_hooks.pop(0)https://stackoverflow.com/questions/56134577
复制相似问题