2016-06-08 94 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

相關問題