我有很多麻烦,跟随使用说明从基维网站,许多步骤没有解释,就像我应该回答警告。
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)]
在.spec文件中?为什么有这个必要?
基维没有多少信息可查。
发布于 2017-03-27 16:38:22
所以,这句话是:
所有的内容都会被删除!
是的,它将被删除和以后用新的文件取代。查一下日期。如果文件和整个文件夹都不能这样薄,我想它会打印permission denied
,所以您会注意到它。但这很重要,因为您需要向文件夹中添加其他文件。
这些额外的文件有两种类型:
依赖关系只是二进制文件(+/加载器、许可证之类),您可以通过*[Tree(p) ...]
代码来获取它们,这只是一个命令,用于“从该文件夹获取所有文件”。没有他们,基维甚至都不会开始。
与此类似,第二个Tree(<app folder>)
也是这样做的,但是对于您自己的文件,例如.py
文件、.kv
文件、图像、音乐、数据库,基本上不管您创建什么。
很明显,如果删除deps,应用程序就不会启动,如果删除应用程序数据,您将得到一些路径错误,并且很可能会崩溃。你不会想要的:P
发布于 2017-04-02 19:02:07
因为我花了很多时间来理解我应该如何打包我的应用程序,下面是一些会对我有帮助的说明。
一些信息可在http://pythonhosted.org/PyInstaller/获得
截至2017年3月,Python3.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:
第二步涉及编辑.spec
文件。这里是我的一个例子。(cf步骤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
in dist/MyApp
时,应用程序就崩溃了。在日志C:\Users.kivy\logs\中,我可以找到两个错误: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
小部件。
发布于 2019-01-29 23:34:19
如果在“a=Analysis.”中,它也是有效的。一个替换的规范文件中的
hiddenimports=[]
为
hiddenimports=['win32file', 'win32timezone']
对于win32file、win32timezone或其他缺少的文件
https://stackoverflow.com/questions/43028666
复制相似问题