環境為:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5)
注意: 這里的PyInstaller,筆者是直接使用pip安裝,中間會安裝一些其他的插件
2. 制作項目的.spec文件
進入到項目的所在的路徑中,執行如下命令生成 .spec文件,文件位於當前路徑下
pyi-makespec -D manage.py
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['manage.py'], pathex=['F:\\Work\\Code\\project_1'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name='manage', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='manage')
然后運行如下命令,生成打包的exe文件
pyinstaller manage.spec
打包程序的運行方式: 在manage.exe的位置打開cmd,輸入manage.exe runserver運行服務即可
到此就是打包程序的步驟,但是運行服務時會出現一些問題,對於筆者遇到的問題就在下面描述一下
問題一: 運行服務是會提示No module named XXX
這是因為Django有些module不會自動收集,需要手動添加
解決方法:在manage.spec文件中修改hiddenimports=[]為hiddenimports=['users','users.apps','sql_server.pyodbc.compiler'],提示缺少什么module就在此處添加什么。(但是很惡心人的是每次只會提示一個錯誤,需要一直修改manage.spec文件,然后重新打包,筆者在這里打包了十幾次才算完成,具體還是看個人的情況)
問題二:打開網頁出現TemplateDoesNotExist 錯誤
解決方法:根據錯誤的提示消息,把項目中的模板文件templates拷貝到相應的位置,刷新頁面即可。
問題三:網頁丟失CSS、JS
參考的stackoverflow 網址:https://github.com/pyinstaller/pyinstaller/issues/2368
首先在項目中的settings文件中添加如下代碼,其中static是筆者項目中的靜態文件位置,static_root是static下的一個空文件夾,然后執行python manage.py collectstatic命令將靜態文件收錄到static_root中:
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
然后在urls.py中添加如下代碼:
from django.conf.urls import static from project_1 import settings urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)