2016-06-08 95 views
1

我已经完成了一个kivy应用程序,然后用打包器打包成一个.apk文件。事实是,现在我想用Pyinstaller打包一个windows的.exe文件,但我意识到这两个程序(buildozer和Pyinstaller)不能以相同的方式工作。我一直在寻找一个很好的教程,可以帮助我获得文件,但是我所看到的所有教程都太简单了,并没有解释如何导入main.py的外部文件(例如图像)以及如何导入外部模块(在buildozer中,我必须将我想要的库添加到apk文件才能正常工作)。我在Ubuntu工作(如果我想要获得Windows的可执行文件,我应该在Windows中工作吗?),并且我已将添加到我的.apk的列表正常工作。这份名单是:如何从我的kivy应用程序(Pyinstaller)获取Windows可执行文件?

requirements = kivy,sqlite3,requests,simplejson,icalendar,datetime,pytz,HTMLParser,email,openssl

如果有人能告诉我如何添加其他文件(main.py是主文件,但我有在main.py进口2的其他文件)我会很高兴,因为我已经尝试了很多次,直到不能工作。

回答

-3

Kivy的文档是here

如果你想为该平台创建一个软件包,你可能必须在Windows中运行它。

0

您必须在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。构建和dist文件夹将被创建。在dist文件夹中,您可能会发现您的exe文件。 希望这会让你走。

+0

您的代码使用外部模块?我说是因为我的主要问题是我不知道如何将python的外部模块(例如icalendar)添加到.spec文件。此外,我不知道如何添加应用程序中使用的图像(kivy应用程序使用main.py目录的图像)。 –

+0

是的,我使用了很多外部模块。这将由脚本收集。您可以通过数据指令添加图像。在我的环境中,图像位于“常用”子文件夹中。 –

+0

添加资产tocs时,如何添加多个_files_而不是follders? – Nearoo

相关问题