Pyinstaller添加数据文件

时间:2017-01-26 09:49:58

标签: 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指定文件如下) 有没有解决方案或替代方法?

4 个答案:

答案 0 :(得分:24)

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

如果要添加一些其他文件,则应使用Adding Data Files

两种实现方式

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

Parameter逻辑

--add-datadatas=中的参数:

  • --add-data
    • 格式:{source}{os_separator}{destination}
      • os_separator
        • Windows:;
        • Mac / Linux / Unix::
      • sourcedestination
        • 逻辑:
          • source:单个或多个文件的路径,支持glob语法。告诉PyInstaller在哪里找到文件。
          • destination 一个或多个文件:目标文件夹,它将在运行时包含您的源文件。 * 注意目标文件名。
            • 文件夹:目标文件夹路径,它与目标根目录相关是绝对路径。
    • 示例:
      • 单个文件:'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,
    ...
)

您的案子

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

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

OR:

    datas=文件中的
  • yourtarget.spec,请参见以下内容:
a = Analysis(...
    datas = ["main.kv", "."],
    ...
)

答案 1 :(得分:20)

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

pyinstaller -F --add-data "main.kv;main.kv" yourtarget.py

答案 2 :(得分:1)

解决方案是运行:pyi-makespec yourscript.py 然后编辑yourscript.spec脚本并在a = Analysis中将数据添加到数据下。

datas=[ ( '/pathToYourFile/main.kv', '.' )]

然后运行pyinstaller yourscript.spec 之后应该很好。

答案 3 :(得分:0)

我的应用程序遇到了这个问题,如果不是不可避免的话,随后的问题很可能

1。 --kv文件的添加数据

使用crifan的答案中的--add-data

2。 Kivy仍然找不到文件

一旦PyInstaller将kv文件放在正确的目录中,Kivy仍然找不到该文件。

可能的症状

  • GUI启动,但屏幕为black and empty
  • 取决于应用程序代码的AttributeError错误。

AttributeError示例:

  • This question

  • 我自己的情况:

    AttributeError: 'NoneType' object has no attribute 'ids'

幸运的是,this answer解决了这个问题。