pyinstaller打包Django項目



工作需要將一個Django后端項目使用pyinstaller打包,沒有實際使用過pyinstaller,所以也是花了個多小時,本文簡單記錄一下。

環境聲明

  • docker:19.03.12
  • python:3.6
  • pyinstaller:3.6
  • dockerimage:centos7.6
  • django:3.2.2

環境准備

下面的命令不是直接復制的啊,先在主機上安裝docker,拉取鏡像,啟動容器。然后將項目copy進容器,在容器中安裝python、pyinstaller以及項目依賴。

安裝:

yum install docker
yum install python3
pip install pyinstaller

docker鏡像獲取:

docker pull centos:7.6.1810

其余依賴:

# 項目路徑下 沒有的話 先 生成
# 推薦的話 每一個python項目都要維護這個配置文件
pip install -r requirements.txt

項目打包

生成spec配置文件:

pyi-makespec -D manage.py

該命令會在項目目錄下生成spec配置文件。

spec初始配置:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['manage.py'],
            pathex=['/home/djangopro''],
             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')

py打包:

pyinstaller manage.spec

生成后項目目錄結構將會多出build與dist目錄
dist目錄即為生成的打包項目,exe生成在dist\manage\目錄里。

項目啟動:

dist/manag/manage runserver

踩坑

無法啟動
RuntimeError:Script runserver does not exist.

解決方法:

# 啟動命令添加參數
# dist/manage/manage runserver --noreload
缺少依賴
ModuleNotFoundError:No Module named 'XXXXXX'

解決方法:

spec配置文件中,修改hiddenimports列表的值,缺啥補啥,然后重新打包運行即可。

我這就是一個簡單的前后端分離的后端項目,沒什么靜態文件什么的。據說靜態這些也有坑,可以看看這個,說不定有幫助。


免責聲明!

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



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