因爲我花了很多時間瞭解我應該如何打包我的應用程序,下面是一些對我真正有幫助的說明。
一些信息在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"
這將創建兩個文件夾,build
和dist
和.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/MyApp
上myapp.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
部件。