使用pyinstaller打包django项目

本文介绍了如何在win10环境下,利用Python3.5和Django2.2.12以及PyInstaller3.6将Django项目打包成exe文件。详细步骤包括:1) 安装PyInstaller;2) 创建并编辑.spec文件,添加隐藏导入;3) 执行打包命令生成dist文件夹,并将必要文件移至相应位置;4) 解决打包后资源文件缺失和运行时的问题,如静态文件的处理和缺失文件的添加。参照相关博客文章进行操作。

1. 环境

  环境为:win10 + Python3.5 + Django (2.2.12) + PyInstaller (3.6)

  安装PyInstaller,直接使用pip安装,中间会安装一些其他的插件

2. 制作项目的.spec文件

  进入到项目的所在的路径中,执行如下命令生成 .spec文件,文件位于当前路径下

pyi-makespec -D manage.py

打开manage.spec文件,hiddenimports=[] 添加settings.py文件里的APP和中间件

3、生成打包的exe文件

pyinstaller manage.spec

会生成dist文件夹,打开dist/manage 文件下,把程序的相关如下红框文件框住的文件,复制到dist/manage文件夹里。

4、dist/manage文件夹有manage.exe 文件 ,cmd运行到dist/manage 路径下,输入

manage.exe runserver

如果看到:如下内容,则说明服务已启动

5、遇到的问题

在打包完

使用 PyInstaller 打包 Django 项目后,运行 `manage.exe` 时出现找不到静态文件(CSS、JS、图片等)的问题,主要是因为 PyInstaller 无法自动识别并打包 Django 中的静态资源文件。Django 项目通常会通过 `collectstatic` 命令将所有静态文件收集到 `STATIC_ROOT` 指定的目录中,但 PyInstaller 打包时并不会自动将这些文件包含进最终的可执行文件目录中[^3]。 ### 解决方案 #### 1. 配置静态文件路径 在 `settings.py` 文件中明确指定静态文件的收集路径,确保在打包前执行 `collectstatic` 命令: ```python STATIC_ROOT = os.path.join(BASE_DIR, 'front', 'static_root') ``` 执行以下命令收集静态文件: ```bash python manage.py collectstatic ``` 该命令会将所有静态资源收集到 `STATIC_ROOT` 指定的目录中[^1]。 #### 2. 手动复制静态文件到打包输出目录 PyInstaller 打包完成后,生成的 `dist/manage` 目录下不会自动包含 `static` 文件夹。可以在打包完成后手动将 `static_root` 文件夹复制到 `dist/manage` 目录下,确保运行时能够正确加载静态资源[^4]。 #### 3. 修改模板中的静态文件引用方式 在 Django 模板中,应使用 `{% load static %}` 和 `{% static 'path/to/file.css' %}` 的方式引用静态资源,而不是使用相对路径。这样可以确保即使工作目录发生变化,静态资源仍能被正确加载[^3]。 示例模板代码: ```html {% load static %} <link rel="stylesheet" href="{% static 'css/style.css' %}"> <script src="{% static 'js/script.js' %}"></script> ``` #### 4. 使用钩子自动包含静态文件(可选) 如果希望在打包过程中自动包含静态资源,可以编写 PyInstaller 的钩子文件(hook),将 `static_root` 目录作为数据文件打包进去。在 `.spec` 文件中添加如下内容: ```python a = Analysis( ... datas=[('path/to/static_root', 'static_root')], ... ) ``` 这样在打包时,静态文件目录会被自动复制到输出目录中,避免手动操作[^4]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值