如何动态导入Python模块?
Python具有一种功能,可以构建和存储类和函数以供以后使用。模块是具有这些方法和类集合的文件的名称。模块可能包含更多的模块。
让我们考虑以下示例,一次性导入多个模块
import sys, os, math, datetime
print ('The modules are imported')
这一次性导入了以下所有四个模块:datetime(用于操作日期对象)、math(包含可计算给定角度的不同三角函数的函数)、sys(用于正则表达式)和os(用于操作系统功能如目录列表)。
The modules are imported
动态导入模块
计算机程序可以在运行时将库(或其他二进制文件)加载到内存中,检索其中包含的函数和变量的地址,调用这些函数或访问这些变量,然后从内存中卸载该库。这个过程被称为动态加载。
以下是动态导入模块的不同方法。
使用import()方法
所有类都有内置的dunder方法(也称为魔术方法)import(),以双下划线开始和结束。它用于在类实例内导入模块或类。
示例
使用内置的import函数而不是import语句可以获得类似的结果,尽管该方法实际上接受一个字符串作为输入。就好像您已经指定了import sys,变量sys现在是sys模块。os模块现在是变量os等等。
math = __import__('math')
os = __import__('os')
sys = __import__('sys')
datetime = __import__('datetime')
输出
因此,import导入一个模块,但需要一个字符串参数。在此实例中,可能已经使用变量或函数调用的输出替换了作为导入的模块的硬编码文本。
此外,分配模块的变量不必具有与模块相同的名称。可以通过导入多个模块创建列表。
>>> math
<module 'math' (built-in)>
>>> sys
<module 'sys' (built-in)>
>>> os
<module 'os' from 'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\lib\os.py'>
>>> datetime
<module 'datetime' from 'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\lib\datetime.py'>
使用imp模块
Python导入机制,用于从包和模块中加载代码,部分由imp模块中的函数公开。它是一种动态导入模块的方法,在您编写代码但不确定需要导入哪个模块的名称的情况下非常有用。
示例
首先,创建一个名为‘module1.py’的模块,其中包含名为‘Dynamic’的类。当执行import_module()函数时,将调用此模块。
class Dynamic:
def dynamic():
print("Welcome to TutorialsPoint")
下面的示例演示了imp模块的使用。它提供了find_module()函数,该函数在当前工作目录中查找上述定义的模块。import_module()函数将动态地导入模块及其成员到程序中。然后return语句返回模块名称和模块中类的名称。
import importlib
modules_list = ["os", "sys", "re", "math"]
for module_name in modules_list:
globals()[module_name] = importlib.import_module(module_name)
print("Modules dynamically imported successfully.")
Output
Following is an output of the above code −
Modules dynamically imported successfully.
import importlib
modnames = ["os", "sys", "math"]
for lib in modnames:
globals()[lib] = importlib.import_module(lib)
print ('The module names are :',lib)
输出结果
The module names are : os
The module names are : sys
The module names are : math
一个字典是globals()方法的结果。每个库的lib键可以被设置为我们导入模块时返回的对象。