2017-03-26 122 views
0

我在Kivy網站的instructions表單後面遇到了很多麻煩,很多步驟都沒有解釋,比如我應該怎樣回答這個警告。使用Pyinstaller打包一個kivy應用程序

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文件中?他們爲什麼需要?

Kivy沒有可用的信息。

回答

1

因此,該行:

所有內容將被刪除!

是的,這將被刪除後用新文件取代。檢查日期。我認爲它打印permission denied,如果它不能爲文件和整個文件夾做這樣的瘦,所以你會注意到它。儘管這很重要,因爲您需要將其他文件添加到文件夾中。

兩種類型的其他文件:

  • kivy依賴
  • 應用數據

依賴是二進制文件(+/-裝載機,許可證,或左右),你讓他們通過*[Tree(p) ...]一段代碼,它只是一個「從該文件夾獲取所有文件」的命令。沒有他們,基維甚至不會開始。

同樣到,第二Tree(<app folder>)不相同,但對於自己的文件,如.py文件,.kv文件,圖像,音樂,數據庫,基本上不管你創建

很明顯,如果您刪除了代碼,應用程序將無法啓動,並且如果您刪除應用程序數據,則會出現一些路徑錯誤並最有可能崩潰。你不想要這些:P

1

因爲我花了很多時間瞭解我應該如何打包我的應用程序,下面是一些對我真正有幫助的說明。

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

可用的Python 3。6,截至3月的2017年 因爲包裝我的應用程序給我的錯誤IndexError: tuple index out of range,我必須安裝PyInstaller的研究與開發版本:

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

然後,我將這樣的:

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步

第2步:

第二步涉及編輯.spec文件。 Here是我的例子。 (參見第3步,約my_hidden_modules的解釋)

我回去cmd,並進入

python -m MyApp myapp.spec 

然後我得到了這樣的警告:

WARNING: The output directory "..." and ALL ITS CONTENTS will be REMOVED! Continue? (y/n) 

我進入y然後按enter

因爲我選擇了y,我很驚訝文件夾build仍然存在,並且dist/MyApp仍然包含許多文件。但這是正常的。 PyInstaller可以輸出單個文件.exe或單個文件夾,其中包含所有腳本的依賴關係和可執行文件。但默認輸出是一個包含多個文件的單個文件夾。

第3步:添加隱模塊

當我在dist/MyAppmyapp.exe點擊,應用程序崩潰。在日誌C:\ Users \ .kivy \ logs \中,我可以找到2個錯誤:ModuleNotFoundError: No module named 'win32timezone'SystemError: <class '_frozen_importlib._ModuleLockManager'>。 正因爲如此,我不得不編輯的.spec文件,並添加這些行:

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部件。

相關問題