如何使用pyinstaller打包可执行python时添加相对目录?

时间:2017-01-19 09:54:32

标签: python relative-path pyinstaller

我有一个python项目,它有一个以下文件树:

\main_dir
    gui.py
    data.py
    \lib
        \files
            file1.txt
            file2.txt
     ... more_dirs and files in lib.

gui.py导入data.pydata.py解析file1.txt作为构造函数的一部分。 我想在Windows中运行gui.py作为可执行文件,因此使用pyinstaller。

使用相对路径

data.py打开file1.txtfile1_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;文件到可执行文件?

1 个答案:

答案 0 :(得分:1)

如果我理解正确您不需要使用--runtime-hook就可以在主脚本启动之前运行其他脚本,例如,如果您在其中添加--runtime-hook=file1.py命令,运行时的执行顺序为:1)运行file1.py,2)运行主脚本。 (当然它们已经编译/打包成一个exe文件)

因此,在您的情况下,您使用gui.py导入data.pydata.py使用files lib。您不需要在lib命令中包含pyinstaller,只需将其与已编译的exe文件放在同一文件夹中,它就会自动查找文件,就像在data.py中一样;如果你想要你可以在你的spec文件中将它们(lib中的文件)包含在datas中,这样这些文件将被编译时复制到目标文件夹(exe文件所在的文件夹),但它确实是不必要。

同时删除-p,因为您的所有脚本(gui.pydata.py)位于同一文件夹中,无需告知pyinstaller搜索imports其他地方。