Python版本¶
1. 安装¶
-
如果用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
优点
- 根治中文 Windows 上的乱码和
UnicodeDecodeError - 行为与 Linux 一致,跨平台、跨机器可预期
- 官方方案:PEP 686 已定 Python 3.15 起默认开启,等于提前启用未来默认值
- 兜底第三方库:别人代码里没写
encoding的open()也安全
缺点
- 只影响 Python 进程,管不到 cmd、记事本、
reg query等非 Python 程序 - 若本地存在必须按 GBK 读的老文件/老数据,不指定编码的
open()会读错——这类场景必须显式写encoding="gbk" - 极少数依赖 locale 默认编码的老脚本行为会变化
适用:所有现代 Python 项目,建议常开。
验证:python -c "import locale; print(locale.getpreferredencoding())" → 开着输出 UTF-8,关着输出 cp936
PYTHONDONTWRITEBYTECODE=1 —— 禁止字节码缓存¶
作用:禁止 Python 在 import 时生成 __pycache__/*.pyc 字节码缓存文件(与代码里写 sys.dont_write_bytecode = True 等效,但零侵入、全机器生效)。
优点
- 目录干净,不会到处出现
__pycache__ - 不用在源码里加任何语句
- 对 pip 装包无影响(pip 预编译走自己的通道)
缺点
- 每次 import 都重新编译源码:大型项目(上千模块)启动慢几百毫秒,小项目无感(本项目实测影响 <0.5ms)
- 全机器生效,其他重启动速度的 Python 项目/工具一并受影响
- 只管"不再生成",不清除存量——已有的
__pycache__需手动删一次
适用:追求目录整洁的小型项目/脚本;大型库开发、高频短进程场景不建议。
重复安装版本残留问题¶
- Windows 里双击 .py 文件,实际执行的是 C:\Windows\py.exe(Python 启动器,注册表关联 "C:\Windows\py.exe" "%L" %*)
- py 启动器从注册表选“最高的已注册版本”,你机器上注册了 3.12 / 3.13 / 3.14 三个,它选了 3.14
- 但 Python314 这个目录早已卸载,磁盘上根本没有(现在只有 Python312 文件夹),注册表是卸载时的残留
- 于是启动失败 Unable to create process——双击时这个报错窗口一闪就关,看起来就是“点了没反应”
- 修复很简单,把残留注册项删掉(HKCU 是当前用户级,只影响 py 启动器的选择,随时可逆):
- Explorer 只在登录时加载一次环境变量,它缓存的还是旧值。双击 .py → py.exe 读到 Explorer 传下来的旧 PY_PYTHON=3.14
- 修改完成后需要重启
reg delete "HKCU\Software\Python\PythonCore\3.14" /f
reg delete "HKCU\Software\Python\PythonCore\3.13" /f