zoukankan      html  css  js  c++  java
  • 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生成在distmanage目录里。

    项目启动:

    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
  • 相关阅读:
    js 防止页面后退的方法
    asp.net 设置网页过期
    C#子类调用基类构造备忘
    asp.net 自定义控件 嵌入资源文件 备忘
    CSS实现高度和宽度自适应
    C# 更新SQL Server数据库备注信息从另一数据库
    asp.net mvc4 学习笔记一(基本原理)
    CommittableTransaction和TransactionScope
    Delphi7 错误: Access violation at address ****** in module 'ntdll.dll'. Read of address ******.
    Delphi XE10 IdFtp 错误:No FTP list parsers have been registered
  • 原文地址:https://www.cnblogs.com/52why/p/14763755.html
Copyright © 2011-2022 走看看