我做了一个kivy应用程序,然后用buildozer打包到.apk。事实是,现在我想用Pyinstaller封装一个.exe for windows但我已经意识到这两个程序(buildozer和Pyinstaller)不能以相同的方式工作。我一直在寻找一个可以帮助我获取文件的好教程,但是我看到的所有教程都过于简单,并没有解释如何导入main.py
的外部文件(例如图像) )以及如何导入外部模块(在buildozer中我必须添加我想要的文件到apk文件才能正常工作)。我在Ubuntu工作(如果我想获取Windows的可执行文件,我应该在Windows中工作吗?)我有我添加到我的.apk的列表才能正常工作。清单是:
requirements = kivy,sqlite3,requests,simplejson,icalendar,datetime,pytz,HTMLParser,email,openssl
如果有人可以告诉我如何添加其他文件(main.py
是主文件,但我有2个其他文件导入main.py
)我会很高兴,因为我试过很多次,直到不起作用。
答案 0 :(得分:4)
您必须在Windows环境中运行PyInstaller yourfile.spec。 我可以作为一个例子共享一个我正在使用的spec文件。
# -*- mode: python -*-
import os
from os.path import join
from kivy import kivy_data_dir
from kivy.deps import sdl2, glew
from kivy.tools.packaging import pyinstaller_hooks as hooks
block_cipher = None
kivy_deps_all = hooks.get_deps_all()
kivy_factory_modules = hooks.get_factory_modules()
datas = [
(join('common', '*.ini'), 'common')
]
# list of modules to exclude from analysis
excludes_a = ['Tkinter', '_tkinter', 'twisted', 'docutils', 'pygments']
# list of hiddenimports
hiddenimports = kivy_deps_all['hiddenimports'] + kivy_factory_modules
# binary data
sdl2_bin_tocs = [Tree(p) for p in sdl2.dep_bins]
glew_bin_tocs = [Tree(p) for p in glew.dep_bins]
bin_tocs = sdl2_bin_tocs + glew_bin_tocs
# assets
kivy_assets_toc = Tree(kivy_data_dir, prefix=join('kivy_install', 'data'))
source_assets_toc = Tree('images', prefix='images')
assets_toc = [kivy_assets_toc, source_assets_toc]
tocs = bin_tocs + assets_toc
a = Analysis(['yourmain.py'],
pathex=[os.getcwd()],
binaries=None,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
runtime_hooks=[],
excludes=excludes_a,
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe1 = EXE(pyz,
a.scripts,
name='mywindowsapplication',
exclude_binaries=True,
icon=join('images', 'mywinapp.ico'),
debug=False,
strip=False,
upx=True,
console=False)
coll = COLLECT(exe1,
a.binaries,
a.zipfiles,
a.datas,
*tocs,
strip=False,
upx=True,
name='mywinapp')
放上' myfile.spec'在您的' yourmain.py'所在的同一目录中的文件文件存在。然后从此目录运行PyInstaller myfile.spec。将创建一个build和dist文件夹。在dist文件夹中,您可以找到您的exe。 希望这能帮到你。
答案 1 :(得分:0)
Kivy现在有一个在Windows中打包的指南:here,适用于kivy 1.9.1或更高版本。仍然与@Bill Bridge的答案类似,如果需要,可以导入sdl2,glew和gstreamer,
from kivy_deps import sdl2, glew
然后使用
将这些参数添加到COLLECT
中
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)]
答案 2 :(得分:-4)
Kivy的文档是here。
如果要为该平台创建程序包,则可能必须在Windows中运行此程序。