gpt4 book ai didi

python-importlib - 如何强制 importlib find_loader 专门使用特定路径?

转载 作者:行者123 更新时间:2023-12-04 05:05:02 25 4
gpt4 key购买 nike

我正在尝试基于 imp 重新实现一些代码要使用的模块importlib反而。 imp.find_module 函数之间存在细微差别和 importlib.find_loader :

# Using imp find_module
>>> import imp
>>> imp.find_module("abc", ["some/path/module.py"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.3/imp.py", line 220, in find_module
raise ImportError(_bootstrap._ERR_MSG.format(name), name=name)
ImportError: No module named 'abc'

# Using import find_loader
>>> import importlib
>>> loader = importlib.find_loader("abc", ["some/path/module.py"])
>>> loader.path
'/usr/lib64/python3.3/abc.py'

看起来像 importlib正在回退到系统库,而 imp.find_module正在使用 path以独占方式参数,最终引发异常。

如何强制 importlib.find_loader专门使用特定路径?

最佳答案

这取决于您的代码的确切目标。首先,这两个调用都是错误的,因为“路径”参数是目录列表,而不是特定文件。

其次,从标准库返回 abc,因为它已经在 sys.modules 中。请记住,importlib.find_loader() 会找到指定模块的加载器,因此包括查找 sys.modules['abc'].__loader__跳过不必要地寻找它。如果您在标准库中指定了一个尚未导入的模块(例如 tokenize),那么 importlib.find_loader() 将返回 None。

换句话说,importlib.find_loader() 将在“路径”中指定时在特定目录中搜​​索模块,但您必须查找尚未导入的内容。

关于python-importlib - 如何强制 importlib find_loader 专门使用特定路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com