首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Pyinstaller打包Kivy应用程序

如何用Pyinstaller打包Kivy应用程序
EN

Stack Overflow用户
提问于 2017-03-26 12:25:39
回答 3查看 2.8K关注 0票数 0

我有很多麻烦,跟随使用说明从基维网站,许多步骤没有解释,就像我应该回答警告。

代码语言:javascript
运行
复制
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文件中?为什么有这个必要?

基维没有多少信息可查。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-27 16:38:22

所以,这句话是:

所有的内容都会被删除!

是的,它将被删除以后用新的文件取代。查一下日期。如果文件和整个文件夹都不能这样薄,我想它会打印permission denied,所以您会注意到它。但这很重要,因为您需要向文件夹中添加其他文件。

这些额外的文件有两种类型:

  • 猕猴桃依赖
  • 应用数据

依赖关系只是二进制文件(+/加载器、许可证之类),您可以通过*[Tree(p) ...]代码来获取它们,这只是一个命令,用于“从该文件夹获取所有文件”。没有他们,基维甚至都不会开始。

与此类似,第二个Tree(<app folder>)也是这样做的,但是对于您自己的文件,例如.py文件、.kv文件、图像、音乐、数据库,基本上不管您创建什么。

很明显,如果删除deps,应用程序就不会启动,如果删除应用程序数据,您将得到一些路径错误,并且很可能会崩溃。你不会想要的:P

票数 1
EN

Stack Overflow用户

发布于 2017-04-02 19:02:07

因为我花了很多时间来理解我应该如何打包我的应用程序,下面是一些会对我有帮助的说明。

一些信息可在http://pythonhosted.org/PyInstaller/获得

截至2017年3月,Python3.6由于打包我的应用程序给了我错误的IndexError: tuple index out of range,所以我不得不安装PyInstaller的开发版本:

代码语言:javascript
运行
复制
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

然后我贴了这个:

代码语言:javascript
运行
复制
python -m PyInstaller --name MyApp --icon "C:\Users\<username>\Desktop\MyApp\icon.ico" "C:\Users\<username>\Desktop\MyApp\myapp.py"

这将创建两个文件夹,builddist,以及一个.spec文件。在dist/MyApp中,我可以找到一个.exe。显然,如果我的应用程序真的很简单(只是一个标签),那么打包的应用程序可以不用第二步就能工作。

步骤2:

第二步涉及编辑.spec文件。这里是我的一个例子。(cf步骤3,关于my_hidden_modules的解释)

我回到cmd,然后输入

代码语言:javascript
运行
复制
python -m MyApp myapp.spec

然后我收到了这样的警告:

代码语言:javascript
运行
复制
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文件并添加以下行:

代码语言:javascript
运行
复制
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小部件。

票数 4
EN

Stack Overflow用户

发布于 2019-01-29 23:34:19

如果在“a=Analysis.”中,它也是有效的。一个替换的规范文件中的

代码语言:javascript
运行
复制
hiddenimports=[]

代码语言:javascript
运行
复制
hiddenimports=['win32file', 'win32timezone']

对于win32file、win32timezone或其他缺少的文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43028666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档