Windows嵌入式Python(以Blender为例)如何定位lib文件?
嵌入式Python如何定位lib目录(以Blender为例)
Windows版Blender附带的嵌入式Python目录结构如下:
blender-2.79b-windows64\ 2.79\ python\ bin\ python.exe python35.dll # 仅这两个文件 lib\ asyncio\ collections\ ... + 大量.py和.pyd文件
即使系统没有全局Python环境,运行python.exe仍能正常工作,且不存在任何.pth或._pth文件。那么这个python.exe是怎么知道库文件在../lib目录的?
注:这种情况并非Blender特有,很多自带嵌入式Python的软件都存在该现象。
核心原因
嵌入式Python的python.exe是通过启动时的内置路径推导逻辑来定位lib目录的,具体步骤如下:
python.exe启动后,会通过Windows系统API(比如GetModuleFileName)获取自身的绝对路径,比如示例中的blender-2.79b-windows64\2.79\python\bin\python.exe。- 基于自身路径向上回溯一级,得到
python目录的路径,再拼接lib子目录路径,最终得到库文件所在的../lib绝对路径。 - 程序会自动把这个路径添加到Python的模块搜索路径
sys.path中,这样就能正常加载lib下的库文件了。
另外,部分嵌入式Python是通过编译时硬编码路径规则实现的——软件开发者在编译Python源码时,会修改默认的库路径逻辑,指定相对自身exe的固定位置作为lib目录,不需要依赖外部配置文件。
内容的提问来源于stack exchange,提问作者Basj
相关产品推荐
相关产品推荐

