我正在使用 pyinstaller 从脚本创建 EXE。脚本和exe的位置如下:
脚本:root-dir\subdir1\subdir2\src\scriptabc.py
exe:root-dir\subdir1\subdir2\exe\scriptabc.exe
要创建 Exe,我从 Exe 目录运行 cmd 命令。
pyinstaller -F -i ABC.ico "..\src\scriptabc.py"
Run Code Online (Sandbox Code Playgroud)
生成的文件在 Exe 文件夹中正确创建,可执行文件在 dist 文件夹中。然后我将可执行文件复制到 Exe 文件夹中,使其与 src\scriptabc.py 文件处于相同的深度级别,并参考根目录。
当我运行 exe 时,我使用相对路径的所有代码项,例如
wb_assets = load_workbook(filename = '..//input//01_assets.xlsx')
Run Code Online (Sandbox Code Playgroud)
运行就好。
但是,当代码使用 pathlib 进行绝对路径评估时,它失败并显示以下错误:
File "pathlib.py", line 587, in __getitem__
IndexError: 3
[8920] Failed to execute script scriptabc
Run Code Online (Sandbox Code Playgroud)
我正在使用 pathlib 建立根目录的绝对路径,如下所示:
from pathlib import Path
abspath = Path(__file__).resolve() # resolve to relative path to absolute
rootpath = abspath.parents[3] # root-dir
Run Code Online (Sandbox Code Playgroud)
一旦我建立了根路径,有很多代码会为其他子目录创建路径。
所以这个索引号在使用 src*.py 文件夹时工作正常 为什么它会为位于 exe*.exe …