跳转至

Python版本

1. 安装

  • 推荐 python-3.12.10-amd64.exe

  • 如果用3.13和3.14可能很多工具库不支持,比如AI库和cocotb(Python仿真)

2. 环境变量

  • 设置位置:系统属性 → 环境变量 → 用户变量
  • setx PYTHONUTF8 1 重开终端生效
  • setx PYTHONDONTWRITEBYTECODE 1 重开终端生效

速查

变量 管什么 性质 建议
PYTHONUTF8=1 默认编码,治乱码 正确性提升 必设
PYTHONDONTWRITEBYTECODE=1 不生成 .pyc 纯美观 随意,无感

PYTHONUTF8=1 —— 编码统一

作用:开启 UTF-8 模式(PEP 540),强制 Python 把 UTF-8 作为一切默认编码,不再跟随系统 locale(中文 Windows 上是 GBK/cp936):

  • open() 未写 encoding 参数时的默认编码:GBK → UTF-8(最关键)
  • 标准输入/输出/错误流(print、input)→ UTF-8
  • 文件系统、文件名相关编码 → UTF-8

优点

  1. 根治中文 Windows 上的乱码和 UnicodeDecodeError
  2. 行为与 Linux 一致,跨平台、跨机器可预期
  3. 官方方案:PEP 686 已定 Python 3.15 起默认开启,等于提前启用未来默认值
  4. 兜底第三方库:别人代码里没写 encoding 的 open() 也安全

缺点

  1. 只影响 Python 进程,管不到 cmd、记事本、reg query 等非 Python 程序
  2. 若本地存在必须按 GBK 读的老文件/老数据,不指定编码的 open() 会读错——这类场景必须显式写 encoding="gbk"
  3. 极少数依赖 locale 默认编码的老脚本行为会变化

适用:所有现代 Python 项目,建议常开。

验证:python -c "import locale; print(locale.getpreferredencoding())" → 开着输出 UTF-8,关着输出 cp936

PYTHONDONTWRITEBYTECODE=1 —— 禁止字节码缓存

作用:禁止 Python 在 import 时生成 __pycache__/*.pyc 字节码缓存文件(与代码里写 sys.dont_write_bytecode = True 等效,但零侵入、全机器生效)。

优点

  1. 目录干净,不会到处出现 __pycache__
  2. 不用在源码里加任何语句
  3. 对 pip 装包无影响(pip 预编译走自己的通道)

缺点

  1. 每次 import 都重新编译源码:大型项目(上千模块)启动慢几百毫秒,小项目无感(本项目实测影响 <0.5ms)
  2. 全机器生效,其他重启动速度的 Python 项目/工具一并受影响
  3. 只管"不再生成",不清除存量——已有的 __pycache__ 需手动删一次

适用:追求目录整洁的小型项目/脚本;大型库开发、高频短进程场景不建议。

重复安装版本残留问题

  1. Windows 里双击 .py 文件,实际执行的是 C:\Windows\py.exe(Python 启动器,注册表关联 "C:\Windows\py.exe" "%L" %*)
  2. py 启动器从注册表选“最高的已注册版本”,你机器上注册了 3.12 / 3.13 / 3.14 三个,它选了 3.14
  3. 但 Python314 这个目录早已卸载,磁盘上根本没有(现在只有 Python312 文件夹),注册表是卸载时的残留
  4. 于是启动失败 Unable to create process——双击时这个报错窗口一闪就关,看起来就是“点了没反应”
  5. 修复很简单,把残留注册项删掉(HKCU 是当前用户级,只影响 py 启动器的选择,随时可逆):
  6. Explorer 只在登录时加载一次环境变量,它缓存的还是旧值。双击 .py → py.exe 读到 Explorer 传下来的旧 PY_PYTHON=3.14
  7. 修改完成后需要重启

reg delete "HKCU\Software\Python\PythonCore\3.14" /f
reg delete "HKCU\Software\Python\PythonCore\3.13" /f