如何实现Python启动时自动运行脚本修改sys.executable取值
实现方案
你提出的启动时自动修改sys.executable的思路完全可行,关键是选对Python全局生效的自动加载入口,不要用仅在特定场景生效的配置,具体操作如下:
- 用
sitecustomize.py作为自动执行的载体:Python启动时会自动扫描所有搜索路径下的sitecustomize.py并执行,覆盖交互模式、-c传参、运行脚本全场景,比仅交互模式生效的PYTHONSTARTUP适配性强很多。- 新建
sitecustomize.py文件,写入以下代码:
import sys import os sys.executable = os.environ.get("PY_LAUNCHER_PATH", "python-launcher.exe")- 不需要改动原有Python安装目录的文件,单独建一个目录存放这个脚本即可,比如新建
C:\python_custom_hooks目录,把写好的sitecustomize.py放进去。 - 在
python-launcher.exe对应的.ini配置中添加环境变量:- 配置
PYTHONPATH=C:\python_custom_hooks,让Python启动时能找到你存放脚本的目录,自动加载sitecustomize.py完成赋值 - (可选)配置
PY_LAUNCHER_PATH=<你的python-launcher.exe的绝对路径>,避免相对路径导致的文件找不到问题,后续如果调整启动器位置,只需要改ini配置即可,不需要修改脚本。
- 配置
- 新建
- 配置完成后直接执行验证命令
python-launcher.exe -c "import sys; print(sys.executable)",就会输出你预期的启动器路径。
踩坑提醒:不要用
PYTHONSTARTUP环境变量实现这个需求,该变量指向的脚本仅在Python进入交互命令行模式时才会执行,传入-c命令、运行本地脚本时都不会触发,覆盖不了你的使用场景。
这个改法还有额外的适配效果:所有依赖sys.executable拉起Python子进程的第三方库,后续都会自动调用配好环境的python-launcher.exe,不会出现子进程漏加载环境、直接裸跑python.exe的问题。
内容的提问来源于stack exchange,提问作者Kerim
相关产品推荐
相关产品推荐

