最近更新于 2025-05-04 21:12
前言
我开始一个新项目就是使用当时最新版本的 Nuitka 作为打包工具,前面几个月还是 2.6.x 版本的,最近几天又在写一个新项目,现在最新版的 Nuitka 是 2.7.0,但是昨晚发现 sys.executable 路径不对劲,最开始我以为是我代码哪里有问题,有些摸不着头脑,今天突然想到是不是 Nuitka 改了,一测试还真的是改了。
Nuitka 在打包程序为单文件的情况下,运行打包的程序时会自动解压释放到一个临时文件,然后以再运行它。如果程序运行中要使用到一些资源文件,比如软件图标文件,就需要知道程序释放到哪个目录了,这样才能正确读取到文件。在 2.6.x 版本的时候我就取 sys.executable 的目录,就是释放的目录,结果昨晚在 2.7.0 测试的时候报错说找不到文件了,我发现里面储存的路径变成了可执行文件的绝对路径了,而不是运行时释放的目录,所以今天就有了下面的测试。
测试
测试环境
- Windows 11 24H2
- Python 3.13.1
代码
import sys
print(sys.argv)
print(sys.executable)
print(__file__)
Nuitka 2.6.9
单文件打包
多文件打包
Nuitka 2.7.0
单文件打包
多文件打包
Nuitka 2.7.0 单文件打包时 sys.executable 和 __file__ 路径有变化