Nuitka 擅长将 Python 编译为可执行的二进制文件。\n但是编译后的二进制文件会从原始绝对路径中找到其他资源文件。\n因此,要移动到另一台计算机,需要制作目录树原始目录树相同。
\n\n例如,如果我编译一个这样的项目:
\n\n/home/me/myproj/\n\xe2\x95\xa0\xe2\x95\x90 myprog.py\n\xe2\x95\x9a\xe2\x95\x90 resource\n \xe2\x95\x9a\xe2\x95\x90 foo.data\nRun Code Online (Sandbox Code Playgroud)\n\n我应该将生成的二进制文件和资源放到另一台计算机的同一位置。\n如何解决此问题?
\n\n我更简单的尖峰是:
\n\n# /home/me/myproj/spike.py\nimport os\nprint(os.path.dirname(__file__))\nRun Code Online (Sandbox Code Playgroud)\n\n编译后,移动到任何其他位置,我总是得到以下结果/home/me/myproj.
我需要一个结果,就像/another/path我将编译myproj.bin到/another/path.
尝试使用sys.argv[0]和os.path.abspath而不是__file__。
例如:
abs_pth = os.path.abspath(sys.argv[0])
your_dir = os.path.dirname(abs_pth)
for val in abs_pth,your_dir:
print(val)
Run Code Online (Sandbox Code Playgroud)
这将帮助您获取可执行二进制文件的当前路径,以及使用位于同一文件夹中的目录。
https://nuitka.net/doc/user-manual.html#onefile-finding-files
sys.argv[0]onefile more 的主模块和主模块之间存在差异__file__,这是由于使用引导程序到临时位置而导致的。第一个路径是原始可执行路径,第二个路径是引导程序可执行文件解压到的临时或永久路径。数据文件将位于后面的位置,您的原始环境文件将位于前面的位置。
# This will find a file near your onefile.exe
open(os.path.join(os.path.dirname(sys.argv[0]), "user-provided-file.txt"))
# This will find a file inside your onefile.exe
open(os.path.join(os.path.dirname(__file__), "user-provided-file.txt"))
Run Code Online (Sandbox Code Playgroud)