pyinstaller打包django項目成exe以及遇到的一些問題


1. 環境

  環境為:win7 + Python3.6 + Django (2.1.10) + PyInstaller (3.5)

  注意: 這里的PyInstaller,筆者是直接使用pip安裝,中間會安裝一些其他的插件

2. 制作項目的.spec文件

  進入到項目的所在的路徑中,執行如下命令生成 .spec文件,文件位於當前路徑下

pyi-makespec -D manage.py

  這里是筆者生成的manage.spec文件

# -*- 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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM