python启动慢主因是模块导入耗时,尤其含c扩展的包、__init__.py中初始化逻辑、sys.path查找过长、windows启动器及杀软扫描等。

为什么 import 一堆包会让启动变慢
Python 启动慢,八成卡在导入阶段——不是代码执行慢,是模块加载本身耗时。尤其是 numpy、pandas、matplotlib 这类带 C 扩展的包,每次 import 都要动态加载共享库、解析大量 PYC、初始化内部状态。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
python -X importtime your_script.py 2>&1 | grep -E "(import|your_module)" | head -20查看最耗时的前几个import - 避免在顶层直接
import pandas as pd,改到函数内按需导入(比如只在 CLI 命令触发时才import) -
matplotlib默认后端会拉起 GUI 环境,非绘图场景务必加import matplotlib; matplotlib.use('Agg')在所有import matplotlib.pyplot之前
__init__.py 里写太多逻辑会拖慢整个包导入
只要某个包被 import,它的 __init__.py 就会立即执行。如果里面写了数据库连接、配置读取、日志初始化,甚至调用了 requests.get(),那所有依赖该包的脚本都会被拖慢——哪怕你只用它一个工具函数。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 把初始化动作移到函数或类的
__init__中,而不是模块级执行 - 检查第三方包的
__init__.py是否有可疑操作(比如pkg_resources或importlib.metadata的全量扫描) - 用
strace -e trace=openat,open,stat python -c "import your_pkg"看它到底打开了哪些文件
虚拟环境路径太深 or 包太多导致 sys.path 查找变慢
Python 导入模块时,会按顺序遍历 sys.path 里的每个目录,对每个 .py 或 __pycache__ 文件做 stat() 系统调用。如果虚拟环境嵌套深(如 /home/user/project/venv/venv/venv/),或者装了上百个包,这个查找过程就明显可感知。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
python -c "import sys; print(len(sys.path))"看路径长度,超过 50 就值得警惕 - 删掉不用的包:
pip-autoremove或手动pip list --outdated+pip uninstall - 避免用
pip install -e .开发多个本地包,它们会全部塞进sys.path;改用pip install -e .[dev]按需安装 extras
Windows 上 py.exe 启动器和反病毒软件是隐藏瓶颈
Windows 用户常忽略两点:一是默认用 py.exe 启动器选 Python 版本(哪怕你只装了一个),它要读注册表、查 PATH、匹配版本标签;二是杀软实时扫描 .py 和 .pyc 文件,尤其对 site-packages 目录高频访问。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 绕过启动器,直接调用解释器:
C:\path\to\python.exe script.py,对比耗时 - 把
venv目录加进杀软白名单(特别是Scripts\和Lib\site-packages\) - 禁用
pycache生成(临时测试):export PYTHONPYCACHEPREFIX=/dev/null(Linux/macOS)或set PYTHONPYCACHEPREFIX=NUL(Windows)
真正卡住的地方,往往不在你的代码里,而在你没意识到的路径查找、杀软拦截、或某个包的 __init__.py 里一行没注释的 time.sleep(0.1) —— 先测,再猜,别直接重写。










