[英]Impoting specific Class from a Python module with `importlib`
go 如何使用其路径从 Python 模块导入特定的 Class ?
我需要使用文件路径从 Python 文件中导入特定的 Class。
我无法控制该文件,它完全在我的 package 之外。
文件.py:
class Wanted(metaclass=MyMeta):
...
class Unwanted(metaclass=MyMeta):
...
元类实现在这里不相关,
但是,我会指出它是我的 package 的一部分,我完全控制它。
导入示例:
spec = importlib.util.spec_from_file_location(name='Wanted', location="path_to_module/mudule.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
这有效,并且Wanted
导入。
问题是Unwanted
也被导入了。
事实上,只要为name
提供了任何srt
值(包括空字符串)
Wanted
和Unwanted
都是从模块中导入的。
这与之前的示例具有相同的效果,其中导入了Wanted
和Unwanted
:
importlib.util.spec_from_file_location(name='random string', location="path_to_module/mudule.py")
我不是在寻找使用importlib
的特定解决方案
任何合理的方式都可以。
我会指出我不需要在导入时使用 Class,
我只需要导入,我的 Metaclass 将负责 rest。
因为您将文件命名为“file.py”:
from file import Wanted
如果您的文件在文件夹中,您可以使用:
from folder.file import Wanted
首先,如果我没记错的话,'name' 参数只是您为尝试导入的模块提供的名称。 其次,当你导入任何模块时,你基本上是在执行其中的每一行代码,所以在这种情况下,这两个类都被创建了。 使用“from module import foo”还是只使用“import module”都没关系。 唯一的区别是,在第一种情况下,“foo”将从全局命名空间中变得可用。
Python 程序由代码块构成。 块是作为一个单元执行的一段 Python 程序文本。 以下是块:一个模块、一个 function 主体和一个 class 定义。
资料来源: https://docs.python.org/3/reference/executionmodel.html#structure-of-a-program
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.