如何查找从包中导入的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'])