【问题标题】:How to add relative directory while packaging executable python with pyinstaller?使用pyinstaller打包可执行python时如何添加相对目录?
【发布时间】:2017-01-19 09:54:31
【问题描述】:

我有一个具有以下文件树的 python 项目:

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

gui.py 导入 data.pydata.pyfile1.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,但得到了同样的错误。

我做错了什么?如何将相关目录和文件添加到可执行文件中?

【问题讨论】:

    标签: python relative-path pyinstaller


    【解决方案1】:

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

    因此,在您的情况下,您使用gui.py 导入data.py,并且data.pylib 中对files 进行操作。您不需要在您的pyinstaller 命令中包含lib,只需将其与已编译的exe 文件放在同一个文件夹中,它会像在您的data.py 中一样自动查找文件;如果您愿意,可以将它们(lib 中的文件)作为 datas 包含在您的规范文件中,这样这些文件将在编译时被复制到目标文件夹(exe 文件所在的同一文件夹),但实际上没有必要.

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

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2019-07-17
      • 1970-01-01
      • 2020-08-31
      • 2020-11-25
      相关资源
      最近更新 更多