我在Kivy网站instructions之后遇到了很多麻烦,许多步骤都没有解释为我应该如何回答警告。
WARNING: The output directory "..." and ALL ITS CONTENTS will be REMOVED! Continue? (y/n)
即使我选择了y,也不会删除该文件夹。
我也应该总是添加这些行:
from kivy.deps import sdl2, glew
Tree('C:\\Users\\<username>\\Desktop\\MyApp\\'),
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)]
Kivy没有太多信息。
答案 0 :(得分:2)
因为我花了很多时间了解我应该如何打包我的应用程序,所以这里有一些对我有帮助的说明。
http://pythonhosted.org/PyInstaller/
提供了一些信息 截至2017年3月的Python 3.6
因为打包我的应用程序给了我错误IndexError: tuple index out of range
,我必须安装PyInstaller的开发版本:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
第1步:
我将MyApp
的所有文件移到了"C:\Users\<username>\Desktop\MyApp"
文件夹中:.py
,.kv
和图片,我创建了icon.ico
。
我创建了另一个文件夹C:\Users\<username>\Desktop\MyPackagedApp
。在此文件夹中,我按Shift+right click
并选择open command window here
。
然后我粘贴了这个:
python -m PyInstaller --name MyApp --icon "C:\Users\<username>\Desktop\MyApp\icon.ico" "C:\Users\<username>\Desktop\MyApp\myapp.py"
这会创建两个文件夹build
和dist
以及.spec
文件。在dist/MyApp
中,我可以找到.exe
。显然,如果我的应用程序非常简单(只有一个标签),打包的应用程序可以在没有第2步的情况下运行。
第2步:
第二步涉及编辑.spec
文件。 Here是我的一个例子。
(参见步骤3,关于my_hidden_modules
)
我回到cmd
,然后输入
python -m MyApp myapp.spec
然后我收到了这个警告:
WARNING: The output directory "..." and ALL ITS CONTENTS will be REMOVED! Continue? (y/n)
我输入y
,然后按enter
。
因为我选择了y,所以我很惊讶文件夹build
仍在那里,dist/MyApp
仍然包含许多文件。但这很正常。 PyInstaller可以输出单个文件.exe
或单个文件夹,其中包含所有脚本的依赖项和可执行文件。但默认输出是包含多个文件的单个文件夹。
第3步:添加隐藏模块
当我点击myapp.exe
中的dist/MyApp
时,应用程序崩溃了。在日志C:\ Users \ .kivy \ logs \中,我可以找到2个错误:ModuleNotFoundError: No module named 'win32timezone'
和SystemError: <class '_frozen_importlib._ModuleLockManager'>
。
因此我必须编辑.spec文件并添加以下行:
my_hidden_modules = [
( 'C:\\Users\\<username>\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\site-packages\\win32\\lib\\win32timezone.py', '.' )
]
在a = Analysis
我将datas = []
更改为datas = my_hidden_modules
,
显然这是因为我使用了FileChooser
小部件。
答案 1 :(得分:1)
所以,行:
所有内容都将被删除!
是的,它将被移除 AND 以后用新文件替换。检查日期。我认为它打印permission denied
如果它不能为文件和整个文件夹做这么薄,所以你会注意到它。但这很重要,因为您需要在文件夹中添加其他文件。
这两种类型的附加文件:
依赖关系只是二进制文件(+/-加载器,许可证等),您可以通过*[Tree(p) ...]
代码获取它们,这只是“从该文件夹中获取所有文件”的命令。没有他们,基维甚至都不会开始。
与此类似,第二个Tree(<app folder>)
执行相同操作,但对于您自己的文件,例如.py
文件,.kv
文件,图像,音乐,数据库,基本上是你创建。
显然,如果您删除deps,app将无法启动,如果您删除应用数据,您将收到一些路径错误,并且很可能会崩溃。你不想要任何:P
答案 2 :(得分:0)
如果在spec文件的'a = Analysis ...'块中有一个替代项,则也可以使用
hiddenimports=[]
为
hiddenimports=['win32file', 'win32timezone']
对于win32file,win32timezone或缺少的任何文件