Pyinstaller adding data files
我在pyinstaller上苦苦挣扎。每当我使用kivy GUI和.kv文件构建此特定脚本并在构建后运行.exe时,都会出现致命错误:
1 | IOError: [Errno 2] No such file or directory: 'main.kv' |
我尝试使用--add-data添加.kv文件以及mdb和dsn文件(用于pypyodbc),但出现错误:
此方法或替代方法是否有解决方案?
如果检查
1 | pyinstaller -F --add-data"main.kv;main.kv" yourtarget.py |
正如其他人(@Anson Chan,@ schlimmchen)所说:
如果要添加一些其他文件,则应使用"添加数据文件"。
两种实施方式
-
命令行:将参数添加到
--add-data -
规格文件:将参数添加到
datas= -
第一次运行
pyinstaller 时生成。-
然后,您可以编辑
*.spec 文件。 -
然后运行
pyinstaller 将直接使用您的*.spec 文件。
-
然后,您可以编辑
-
第一次运行
-
--add-data :-
格式:
{source}{os_separator}{destination} -
os_separator :-
Windows:
; -
Mac / Linux / Unix:
:
-
Windows:
-
source 和destination -
逻辑:
-
source :单个或多个文件的路径,支持glob语法。告诉PyInstaller在哪里找到文件。 -
destination
一个或多个文件:目标文件夹,它将在运行时包含您的源文件。
*注意:不是目标文件名。- folder:目标文件夹路径,与目标根目录相对,不是绝对路径。
-
-
逻辑:
-
-
例子:
-
单个文件:
'src/README.txt:.' -
多个文件:
'/mygame/sfx/*.mp3:sfx' -
文件夹:
/mygame/data:data'
-
单个文件:
-
格式:
-
datas= - 格式:列表或元组。
- 示例:请参见以下内容。
1 2 3 4 5 6 7 8 9 10 | 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
-
或:
-
yourtarget.spec 文件中的datas= ,请参见以下内容:
1 2 3 4 | a = Analysis(... datas = ["main.kv","."], ... ) |
解决方案是运行:
然后编辑yourscript.spec脚本,并在a = Analysis中的数据下添加文件。
1 | datas=[ ( '/pathToYourFile/main.kv', '.' )] |
然后运行
之后应该会很好。
我的应用程序遇到了这个问题,如果不是不可避免的话,可能还会发生随后的问题。
1. --kv文件的--add-data
使用
2. Kivy仍然找不到文件
一旦PyInstaller将kv文件放在正确的目录中,Kivy仍然找不到该文件。
可能的症状:
- GUI启动,但屏幕为黑屏且为空。
- 取决于应用程序代码的AttributeError错误。
AttributeError示例:
-
这个问题
-
我自己的情况:
AttributeError: 'NoneType' object has no attribute 'ids'
幸运的是,这个答案解决了这个问题。