2017-05-09 48 views
0

我使用python 3和Kivy編寫了一個小應用程序。該應用程序基於python以及kv文件。我想爲Windows創建一個包。根據官方文檔中的信息,我能夠創建一個包,但它真的很大!然後,我試圖減小不包含未使用的庫的包的大小。爲此,我再次遵循官方文件。Kivy,Python:我無法減小PyInstaller生成的包的大小

這是規範文件我創建並修改:

from kivy.deps import sdl2, glew 
from kivy.tools.packaging.pyinstaller_hooks import get_deps_minimal,  hookspath 
# -*- mode: python -*- 

block_cipher = None 


a = Analysis(['main.py'], 
      pathex=['C:\\Users\\..\\wecker'],    
      binaries=[], 
      datas=[], 
      hiddenimports=[], 
      hookspath=hookspath(), 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher, 
      **get_deps_minimal(video=None, audio=None)) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='myweckapp', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, Tree('buildtemp'), 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], 
       strip=False, 
       upx=True, 
       name='myweckapp') 

當我運行命令:

python -m PyInstaller --name touchtracer examples-path\demo\touchtracer\main.py 

我獲得以下錯誤信息:

WARNING: stderr: TypeError: type object got multiplevalues for keyword argument 'excludes' 

我無法繼續。我試圖消除代碼行:

excludes=[], 

然後我得到了以下信息:

WARNING: stderr: TypeError: type object got multiplevalues for keyword argument 'hiddenimports' 

因此,我也試圖eleiminate這一行:

hiddenimports=[] 

現在,我可以創建一個包但是仍然是巨大的!

任何想法,我錯了嗎?

回答

0

它有多大?我以前使用PyInstaller時遇到過類似的大小問題。我有一些像IPython,cv2等巨大的模塊,PyInstaller默認不會排除它們。您可以運行下面的代碼來獲取所有的Python模塊,安裝和建造的列表:

import pkgutil 
for i in pkgutil.iter_modules(): 
    print('"'+i[1]+'",') 

這讓你安裝的所有模塊的列表。接下來,運行以下命令生成SPEC文件:

pyi-makespec main.py 

接下來,打開spec文件。在排除部分,粘貼從上面的代碼創建的列表。只刪除你需要的(你需要刪除一些內置的)。看看這是否有幫助。

+0

對不起,我是個新手。我在哪裏必須編寫代碼「import pkgutil ...」? – dade100

+0

我的意思是有很多方法可以減少浪費,看起來像是在正確的軌道上。什麼是完整的文件大小什麼類型的媒體,如果你正在使用。如果有的話,將特定文件轉換爲不同類型可以減少整體大小,並且質量損失最小。理解你本質上構建了一個具有程序所有依賴關係的靜態應用程序也很重要。我在測試機器上爲自己做了一些事情,在這些機器上我捆綁了Python,它和kivy以及我需要的其他所有測試一起使用。你能給我們更多的信息嗎? – Afflicted

+0

您可以打開IDLE並鍵入它.IDLE是python的交互式shell。沒問題,樂意幫忙。 –