Nuitka 2.7.0 单文件打包时 sys.executable 和 __file__ 路径有变化

最近更新于 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__)

file

Nuitka 2.6.9

单文件打包
file

多文件打包
file

Nuitka 2.7.0

单文件打包
file

多文件打包
file

Nuitka 2.7.0 单文件打包时 sys.executable 和 __file__ 路径有变化
Scroll to top
打开目录