Pyinstaller添加数据文件

sta*_*os2 13 pyinstaller

我正在努力使用pyinstaller,每当我使用kivy GUI构建这个特定的脚本并在构建之后运行.exe时我会得到致命的错误,它无法执行脚本.我通过cmd运行它,它给我错误:IOError: [Errno 2] No such file or directory: 'main.kv'

我尝试在启动构建时使用--add-data添加.kv文件以及mdb和dsn文件(在脚本中使用pypyodbc),但这样做我收到错误:( unrecognized arguments: --add-data'main.kv'其余的指定文件为--add-data follow)有没有解决方案或替代方法?

cri*_*fan 46

正如其他人(@Anson Chan、@schlimmchen)所说:

如果你想添加一些额外的文件,你应该使用添加数据文件

两种实现方式

  • 命令行:添加参数--add-data
  • 规范文件:将参数添加到datas=
    • pyinstaller第一次运行时生成。
      • 稍后您可以编辑您的*.spec文件。
      • 然后运行pyinstaller将直接使用您的*.spec文件。

Parameter 逻辑

--add-data或 中的参数datas=

  • --add-data
    • 格式: {source}{os_separator}{destination}
      • os_separator
        • 视窗: ;
        • Mac/Linux/Unix: :
      • sourcedestination
        • 逻辑:
          • source: 单个或多个文件的路径,支持glob语法。告诉 PyInstaller 在哪里可以找到文件。
          • destination file 或 files:目标文件夹将在运行时包含您的源文件。*注意不是目标文件名。
            • 文件夹:目标文件夹路径,这是相对向目的地根,NOT的绝对路径。
    • 例子:
      • 单个文件: 'src/README.txt:.'
      • 多个文件: '/mygame/sfx/*.mp3:sfx'
      • 文件夹: /mygame/data:data'
  • datas=
    • 格式:列表或元组。
    • 示例:请参阅以下内容。
added_files = [
    ( 'src/README.txt', '.' ),
    ( '/mygame/data', 'data' ),
    ( '/mygame/sfx/*.mp3', 'sfx' )
]

a = Analysis(...
    datas = added_files,
    ...
)
Run Code Online (Sandbox Code Playgroud)

你的情况

对于您的(Windows 操作系统),这里是:

  • --add-data 在命令行中
    • pyinstaller -F --add-data "main.kv;." yourtarget.py

或者:

  • datas=yourtarget.spec文件中,请参阅以下内容:
a = Analysis(...
    datas = ["main.kv", "."],
    ...
)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,非常清楚地显示了命令行参数和规范文件等效项之间的等效性。这些例子都很棒。做得好 (4认同)

小智 24

如果您检查pyinstaller -h帮助,您可以找到这样的--add-data选项[--add-data <SRC;DEST or SRC:DEST>].所以在你的情况下尝试

pyinstaller -F --add-data "main.kv;main.kv" yourtarget.py
Run Code Online (Sandbox Code Playgroud)

  • 上面的代码将在分发路径中添加一个文件夹,其中包含 main.kv,如下所示:`distfolder/main/main.kv`。要解决此问题,命令应为:`pyinstaller -F --add-data "main.kv;"。你的目标.py` (9认同)
  • 是否使用分号或冒号作为分隔符取决于`os.pathsep`,即,在大多数*nix系统上,这是冒号,在Windows上,这应该是分号. (8认同)

kam*_*tor 7

解决方案是运行:pyi-makespec yourscript.py 然后编辑 yourscript.spec 脚本并在 a= Analysis 中添加 datas 下的文件。

datas=[ ( '/pathToYourFile/main.kv', '.' )]
Run Code Online (Sandbox Code Playgroud)

那么pyinstaller yourscript.spec 在那之后运行应该是好的。