我正在使用 pyinstaller 从脚本创建 EXE。script和exe的位置如下:
脚本:root-dir\subdir1\subdir2\src\scriptabc.py
exe:根目录\subdir1\subdir2\exe\scriptabc.exe
要创建 Exe,我从 Exe 目录运行 cmd 命令。
pyinstaller -F -i ABC.ico "..\src\scriptabc.py"
生成的文件在 Exe 文件夹中正确创建,可执行文件在 dist 文件夹中。然后我将可执行文件复制到 Exe 文件夹中,使其与 src\scriptabc.py 文件的深度级别相同,并引用根目录。
当我运行 exe 时,我使用相对路径的所有代码项,例如
wb_assets = load_workbook(filename = '..//input//01_assets.xlsx')
运行得很好。
但是,当代码使用 pathlib 进行绝对路径评估时,它会失败并出现以下错误:
File "pathlib.py", line 587, in __getitem__
IndexError: 3
[8920] Failed to execute script scriptabc
我正在使用 pathlib 建立根目录的绝对路径,如下所示:
from pathlib import Path
abspath = Path(__file__).resolve() # resolve to relative path to absolute
rootpath = abspath.parents[3] # root-dir
一旦我建立了根路径,就会有很多代码为其他子目录创建路径。
所以这个索引号在使用 src*.py 文件夹时可以正常工作 为什么它会给位于 exe*.exe 文件夹中的 exe 错误?
文件选项是否只查看脚本文件名?因为如果是深度的话,exe和src文件夹的深度是完全一样的。
如果我将粘贴复制到 src 文件夹并从那里运行,exe 就可以正常工作。在我的 exe 发行版中,我根本不想拥有 src 文件夹,如果可能的话,让代码从 exe 文件夹运行。
有人可以帮忙吗?
问题的第二部分是我正在寻找包含所有 dll 文件的规范脚本(我希望它们捆绑在 exe 中,而不是在每台计算机上安装 redist 包。我的计算机中有 SDK 和所有必需的 dll 文件)。我需要问另一个问题吗?