pyinstaller打包django项目

切换到工程目录,在工程目录的虚拟环境中安装Pyinstaller.

安装pyinstaller

pip install pyinstaller

打包

执行下面的命令,生成可执行文件的目录

pyinstaller -D manage.py

生成两个文件夹distbuild ,以及一个配置文件manage.spec
其中要使用的可执行文件位于dist/manage/manage.exe

运行

切换到exe文件所在目录,运行dos窗口。

manage.exe runserver

在windows系统上,运行exe文件不需要用python运行,以下是个错误的示例。

python manage.exe runserver

报错解决

缺模块 Modules

运行服务后,在cmd窗口可以看到缺失包的提示。
根据提示一一添加至manage.spec文件中的hiddenimports列表中:

hiddenimports=['my_app.apps','my_app.admin','my_app.models','my_app.urls','my_app.views','my_app.middlewares.auth']

所缺失的模块,基本都是自定义添加的app中的.py文件。
之后回到工程目录下,运行cmd窗口,使用下面的命令重新打包:

pyinstaller manage.spec

缺模板文件 Templates

将templates文件,拷贝到dist/manage目录下,刷新页面即可。
也可以通过配置.spec文件的方式打包的时候自动完成拷贝动作。

 datas=[(r'D:\Project\project_python\my_pro\templates', r'.\templates'),]

其中,元组中第一个元素是模板文件存放的绝对路径,第二个元素是打包完成后,在根目录下的相对路径。

缺静态资源文件 Static

项目部署的时候,或者开发者模式下debug模式是关闭的,此时Django不会调用原来的static文件。
需要为静态资源文件指定一个根目录STATIC_ROOT,并启用Nginx做反向代理。

  1. 修改工程文件中的urls.py文件,给文件中添加静态文件根目录。
from django.contrib import admin
from django.urls import path
from django.conf.urls import static
from camera_pro import settings
urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  1. 配置settings.py文件中的根目录
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  1. 回到工程目录下,运行cmd窗口,重新运行一次打包命令:
pyinstaller manage.spec
  1. 运行静态资源收集程序,将所有的静态资源文件拷贝在项目根目录下得static文件夹中
python manage.py collectstatic
  1. 将收集完整的静态资源文件夹static拷贝到dist/manage目录下。
  2. 如果清楚知道静态资源的位置,也可以跳过第4,5步,直接在dist/manage目录下创建一个static文件夹,人工把所有的静态资源文件拷贝过来。
  3. 也可以通过配置.spec文件自动完成拷贝。
 datas=[(r'D:\Project\project_python\my_pro\static', r'.\static'),
(r'D:\Project\project_python\my_pro\templates', r'.\templates')]

还可以配置添加其它需要拷贝到打包根目录下的内容:

 datas=[(r'D:\Project\project_python\my_pro\static', r'.\static'),
(r'D:\Project\project_python\my_pro\templates', r'.\templates'),
(r'D:\Project\project_python\my_pro\upload', r'.\upload')]
  1. 对Nginx的配置文件D:\APP\nginx-1.24.0\conf\nginx.conf,做个最简单的配置:

主要是设置server部分:

  1. 用80端口代理8000端口。
  2. 配置要代理的指向:http://127.0.0.1:8000/。
  3. 配置静态资源文件路径。
  4. 指定项目运行的根目录, 如果之前指定的目录和当前目录不同,这里一定要重新写.
  5. 需要注意的是,这里配置的路径均为部署环境中的路径.
    server {
        listen       80;
        server_name  localhost;
        root D:\Project\project_python\my_pro\dist\manage;
        location / {
            proxy_pass  http://127.0.0.1:8000/;
        }
        
        location /upload  {
              alias D:\Project\project_python\my_pro\dist\manage\upload;
        } 
        
        location /static {
            alias D:\Project\project_python\my_pro\dist\manage\static;
        }
  1. 运行Nginx服务器
    切换到nginx.exe所在目录:
start nginx

在浏览其中输入127.0.0.1,就可以访问127.0.0.1:8000指向的页面了。
11. 如果要结束Nginx服务

nginx -s stop
  1. 如果要查看Nginx服务配置是否有效
nginx -t

Nginx配置完成后不能访问

如果是在测试机上跑项目,要检查下测试机上的防火墙是否配置了manage.exe的白名单。
在这里插入图片描述
进一步的,可以配置下入站规则,指定允许的协议,端口,位置等信息。
在这里插入图片描述

同时检查下第三方安全卫士是否配置了manage.exe的白名单。
在这里插入图片描述

缺包 site-packages

打包过程中,有些包会因为一些奇怪的因素,打不进来。
看一下打包流程,将打包失败的包,手动从虚拟环境中拷贝到dist/manage目录下。
对于一个工程文件,通常虚拟环境位于工程目录下的venv文件夹下。
项目依赖的包存放在venv/Lib/site-packages目录中。

完成

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q_M_Y_Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值