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列表的值,缺啥补啥,然后重新打包运行即可。

我这就是一个简单的前后端分离的后端项目,没什么静态文件什么的。据说静态这些也有坑,可以看看这个,说不定有帮助。

posted @ 2021-05-13 11:11  红雨520  阅读(1574)  评论(0编辑  收藏  举报