如何查找从包中导入了哪些 Python 模块?
包含 Python 代码、语句、函数或类定义的文件称为模块。我们将创建的名为“module”的模块是一个名为 module.py 的文件。
为了将复杂的程序分解成更小、更容易理解的部分,我们使用模块。代码重用是模块的另一个好处。
在本文中,我们将讨论查找从包中导入了哪些 Python 模块的各种方法。
使用列表推导式
为了迭代 Python 列表中的每个元素,列表推导式由包含表达式的方括号组成,然后对每个元素运行该表达式。
Python 列表推导式提供了一种更短的语法,用于从现有列表的元素创建新列表。
示例
以下示例使用 sys 库和列表推导式,默认情况下以未排序列表的形式返回所有导入的本地模块名称。
使用 `__name__`(也称为 dunder),此代码迭代 `sys.modules.values()` 以检查项目是否为本地作用域模块。如果是,则将模块名称与 ‘output’ 保存。为提高可读性,此代码对 ‘output’ 变量进行排序并将其保存回自身。这些 ‘output’ 的列表格式输出将发送到终端。
import sys output = [module.__name__ for module in sys.modules.values() if module] output = sorted(output) print('The list of imported Python modules are :',output)
输出
以下是上述代码的输出:
The list of imported Python modules are : ['__main__', '_bootlocale', '_codecs', '_collections', '_functools', '_heapq', '_imp', '_locale', '_operator', '_signal', '_sitebuiltins', '_stat', '_sysconfigdata_m_linux_x86_64-linux-gnu', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'builtins', 'codecs', 'collections', 'collections.abc', 'collections.abc', 'contextlib', 'encodings', 'encodings.aliases', 'encodings.latin_1', 'encodings.utf_8', 'errno', 'functools', 'genericpath', 'heapq', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'io', 'itertools', 'keyword', 'marshal', 'mpl_toolkits', 'operator', 'os', 'posix', 'posixpath', 'posixpath', 'reprlib', 'site', 'stat', 'sys', 'sysconfig', 'types', 'warnings', 'weakref', 'zipimport']
使用 pip freeze 命令
此函数显示所有导入的全局模块的名称和版本的列表,默认情况下按字母顺序排列。
示例
在 IDE 中打开终端窗口,输入以下命令。按 Enter 键执行:
C:\Users\Lenovo>pip freeze
输出
终端接收输出:
aspose-cells==22.7.0 click==8.1.3 cloudpickle==2.1.0 colorama==0.4.5 dask==2022.7.0 et-xmlfile==1.1.0 fsspec==2022.5.0 genno==1.11.0 ixmp==3.5.0 JPype1==1.4.0 llvmlite==0.38.1 locket==1.0.0 message-ix==3.5.0 modcall==0.1.0 mysql-connector-python==8.0.29 namespace==0.1.4 native==0.0.0.0a0.dev20210615 numba==0.55.2 numpy==1.22.4 openpyxl==3.0.10 packaging==21.3 pandas==1.4.3 partd==1.2.0 Pint==0.19.2 protobuf==4.21.2 psycopg2==2.9.3 pycparser==2.21 pyparsing==3.0.9 python-dateutil==2.8.2 python-dotenv==0.20.0 python-magic==0.4.27 pytz==2022.1 PyYAML==6.0 scipy==1.9.1 six==1.16.0 sparse==0.13.0 toolz==0.12.0 walk==0.3.5 workbook==1.1 xarray==2022.3.0 xlrd==2.0.1 xlutils==2.0.0 xlwt==1.3.0
使用 dir() 方法
dir() 函数返回给定对象的所有属性和方法,但不返回其相关值。此函数甚至会返回所有对象的默认内置属性。
示例
以下示例使用 dir() 方法返回所有本地模块名称的排序列表:
module = dir() print('The list of imported Python modules are :',module)
输出
以下输出表明此脚本仅显示与我们的本地作用域相关的名称:
The list of imported Python modules are : ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
使用 inspect.getmember() 和 lambda 函数
inspect 模块提供许多有用的函数,有助于收集有关活动对象(如模块、类、方法、函数、回溯、帧对象和代码对象)的数据。它可以帮助您检查类的内容、检索方法的源代码、提取和格式化函数的参数列表,或收集显示详细回溯所需的所有数据,等等。
匿名、简短的函数称为 lambda 函数。虽然 lambda 函数只能有一个表达式,但它可以具有任意数量的参数。
示例
以下示例使用 inspect.getmember() 和 lambda 函数返回排序格式的导入本地模块。
此代码将导入的本地模块的名称及其在系统中的位置作为可迭代对象返回。使用 for 循环对其进行迭代并逐行打印。
import inspect import os modules = inspect.getmembers(os) results = filter(lambda m: inspect.ismodule(m[1]), modules) for o in results: print('The list of imported Python modules are :',o)
输出
以下是上述代码的输出:
The list of imported Python modules are : ('abc', <module 'abc' from '/usr/lib64/python3.6/abc.py'>) The list of imported Python modules are : ('errno', <module 'errno' (built-in)>) The list of imported Python modules are : ('path', <module 'posixpath' from '/usr/lib64/python3.6/posixpath.py'>) The list of imported Python modules are : ('st', <module 'stat' from '/usr/lib64/python3.6/stat.py'>) The list of imported Python modules are : ('sys', <module 'sys' (built-in)>)
使用 sys 模块
可以使用 `sys.modules` 字典来查找应用程序正在使用的特定包中的所有 Python 模块。`sys.modules` 是一个将模块名称与模块关联起来的字典。要查看导入的模块,可以查看其键。
示例
以下是一个使用 sys 模块查找从包中导入的模块的示例:
from datetime import datetime import sys print (sys.modules.keys())
输出
以下是上述代码的输出:
dict_keys(['builtins', 'sys', '_frozen_importlib', '_imp', '_warnings', '_thread', '_weakref', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'zipimport', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_weakrefset', '_bootlocale', '_locale', 'site', 'os', 'errno', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', 'sysconfig', '_sysconfigdata_m_linux_x86_64-linux-gnu', 'types', 'functools', '_functools', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'weakref', 'collections.abc', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'mpl_toolkits', 'datetime', 'time', 'math', '_datetime'])