Python 语言本身没有一个名为 everything 的内置函数、模块或关键字。

你提出的 everything 源码,更像是一个思想上的隐喻,它代表了“获取 Python 中所有可用信息”的终极目标,这个目标可以通过多种方式实现,每种方式都对应着 Python 生态中不同的“源码”或工具。
下面,我将从几个不同的层面来解读“Python 的一切”,并展示如何通过代码来“获取”它们。
Python 的“一切”是运行时环境
这是最接近“一切”概念的层面,在 Python 程序运行时,一切事物都是对象,这个“一切”包括了:
- 内置函数和类型: 如
len(),print(),str,list,dict等。 - 标准库模块: 如
os,sys,json,datetime等。 - 你自己定义的模块、类、函数和变量。
- 第三方库安装的模块。
如何获取这个“一切”?答案是 dir() 和 globals() / locals()。

dir() - 查看“目录”
dir() 函数是探索 Python 命名空间(namespace)的瑞士军刀,它会返回一个对象所拥有的属性和方法列表。
源码层面理解:
当你调用 dir(some_object) 时,Python 会查找该对象的 __dir__ 方法并调用它,如果没有定义 __dir__,它会尝试从对象的 __dict__ 属性(如果存在)和其类型继承链中收集名称。
示例代码:
# 1. 查看当前模块(脚本)的“一切”
print("--- 当前模块的 'everything' ---")
current_scope = dir()
print(current_scope)
# 输出可能包含: ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', ...]
# 2. 查看内置函数的“一切”
print("\n--- 内置函数的 'everything' ---")
builtins_scope = dir(__builtins__)
print(builtins_scope)
# 输出包含: ['ArithmeticError', 'AssertionError', 'AttributeError', ..., 'len', 'print', 'range']
# 3. 查看一个列表对象的“一切”
print("\n--- 列表对象的 'everything' ---")
my_list = [1, 2, 3]
list_methods = dir(my_list)
print(list_methods)
# 输出包含: ['__add__', '__class__', '__contains__', ..., 'append', 'clear', 'copy', 'count', ...]
globals() 和 locals() - 查看“全局”和“局部”变量
这两个函数返回一个包含当前作用域中所有变量和其值的字典。

globals(): 返回全局符号表的字典。locals(): 返回局部符号表的字典(在函数内部调用时)。
示例代码:
# 全局变量
global_var = "I am global"
def my_function():
# 局部变量
local_var = "I am local"
print("--- 局部 'everything' in my_function ---")
print(locals())
# locals() 输出: {'local_var': 'I am local', 'my_function': <function my_function at ...>}
print("--- 全局 'everything' ---")
print(globals())
# globals() 输出: {'__name__': '__main__', '__doc__': None, ..., 'global_var': 'I am global', 'my_function': <function my_function at ...>}
my_function()
Python 的“一切”是安装的包
如果你想了解你的 Python 环境中安装了哪些包(包括第三方库和标准库),一切”就是包列表。
如何获取这个“一切”?答案是 pkgutil 和 importlib.metadata (Python 3.8+)。
pkgutil - 模块迭代器
pkgutil 提供了迭代器来查找所有可导入的模块。
示例代码:
import pkgutil
print("--- 遍历所有可导入模块的 'everything' (部分) ---")
modules = []
for importer, modname, ispkg in pkgutil.iter_modules():
modules.append(modname)
# 为了不输出太多,这里只打印前20个
if len(modules) <= 20:
print(f"Found module: {modname} (Is a package: {ispkg})")
print(f"\nTotal modules found (approximate): {len(modules)}")
importlib.metadata - 更现代的包管理方式 (推荐)
这是获取已安装分发包(distributions)信息的标准方式。
示例代码:
# 需要 Python 3.8+
from importlib.metadata import distributions
print("--- 所有已安装包的 'everything' (部分) ---")
for dist in distributions():
print(f"Package: {dist.metadata['Name']}, Version: {dist.version}")
Python 的“一切”是源代码文件
如果你想查看某个模块的源代码文件本身,一切”就是文件路径。
如何获取这个“一切”?答案是 inspect 模块。
inspect 模块提供了几个强大的函数来获取对象(包括模块)的源信息。
示例代码:
import os
import inspect
# 1. 获取 inspect 模块本身的源文件路径
inspect_path = inspect.getsourcefile(inspect)
print(f"inspect 模块的源文件路径: {inspect_path}")
# 2. 获取 inspect.getsourcefile 函数的源代码行号
line_number = inspect.getsourcelines(inspect.getsourcefile)[1]
print(f"该函数定义在第 {line_number} 行附近")
# 3. 获取一个函数的完整源代码
def example_function():
"""这是一个示例函数。"""
return "hello, world"
source_code = inspect.getsource(example_function)
print("\nexample_function 的源代码:")
print(source_code)
Python 的“一切”是标准库的完整源码
如果你想阅读 Python 标准库的源码,你需要去 Python 的官方代码仓库。
GitHub 仓库地址: https://github.com/python/cpython
这个仓库包含了用 C 语言实现的 Python 解释器核心(Modules/, Objects/ 等目录)和用 Python 实现的标准库(Lib/ 目录)。
os 模块的源码就在:
https://github.com/python/cpython/tree/main/Lib/os.py
sys 模块的源码主要在 C 部分:
https://github.com/python/cpython/tree/main/Modules/sysmodule.c
如何选择你的“everything”工具
| 你的目标 | 工具/方法 | 描述 |
|---|---|---|
| 查看当前作用域内有哪些名字 | dir() |
最常用,快速查看一个对象的属性和方法列表。 |
| 查看当前作用域内有哪些变量及其值 | globals() / locals() |
返回字典,方便遍历和操作变量。 |
| 列出环境中所有已安装的包 | importlib.metadata (推荐) |
现代标准,信息准确。 |
| 查找所有可导入的模块 | pkgutil.iter_modules() |
可以发现一些没有在 sys.modules 中注册的模块。 |
| 获取模块/函数的源文件路径 | inspect.getsourcefile() |
用于定位代码文件。 |
| 获取函数/类的源代码 | inspect.getsource() |
用于代码分析、文档生成等。 |
| 阅读 Python 官方源码 | github.com/python/cpython | 学习 Python 内部实现的最佳途径。 |
当有人问起“Python 的 everything 源码是什么”时,最准确的回答是:它不是一个单一的东西,而是一个由 dir(), inspect, importlib.metadata 等工具共同构建的、用于探索和理解 Python 运行时环境和代码库的动态过程。
