我有一个python项目,它有一个以下文件树:
\main_dir
gui.py
data.py
\lib
\files
file1.txt
file2.txt
... more_dirs and files in lib.
gui.py
导入data.py
。 data.py
解析file1.txt
作为构造函数的一部分。
我想在Windows中运行gui.py
作为可执行文件,因此使用pyinstaller。
data.py
打开file1.txt
:file1_dir = os.path.join(os.path.curdir, "lib", "files")
我运行以下命令:
pyinstaller "..fullpath..\main_dir\gui.py" -p "..fullpath..\main_dir\" --runtime-hook "..fullpath..\main_dir\lib"
pyistaller成功打包data.py
但是在运行可执行文件时出现以下错误:
“FileNotFoundError:系统找不到指定的路径:'。\ lib \ files \'
我尝试将挂钩更改为<fullpath>\main_dir\lib\files
,但遇到了同样的错误。
我做错了什么?如何添加相对目录&amp;文件到可执行文件?
答案 0 :(得分:1)
如果我理解正确您不需要使用--runtime-hook
,就可以在主脚本启动之前运行其他脚本,例如,如果您在其中添加--runtime-hook=file1.py
命令,运行时的执行顺序为:1)运行file1.py
,2)运行主脚本。 (当然它们已经编译/打包成一个exe文件)
因此,在您的情况下,您使用gui.py
导入data.py
,data.py
使用files
lib
。您不需要在lib
命令中包含pyinstaller
,只需将其与已编译的exe文件放在同一文件夹中,它就会自动查找文件,就像在data.py
中一样;如果你想要你可以在你的spec文件中将它们(lib中的文件)包含在datas
中,这样这些文件将被编译时复制到目标文件夹(exe文件所在的文件夹),但它确实是不必要。
同时删除-p
,因为您的所有脚本(gui.py
和data.py
)位于同一文件夹中,无需告知pyinstaller
搜索imports
其他地方。