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列表的值,缺啥补啥,然后重新打包运行即可。
我这就是一个简单的前后端分离的后端项目,没什么静态文件什么的。据说静态这些也有坑,可以看看这个,说不定有帮助。
作者:红雨
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通