pyinstaller打包django项目的实现步骤

 更新时间:2021年09月30日 10:17:54   作者:px_cmd  
本文主要介绍了pyinstaller打包django项目的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

安装pyinstaller

pip install pyinstaller

制作项目的.spec文件
  进入django项目所在路径,运行

pyi-makespec -D manage.py

   在路径下,生成一个.spec文件以文本的方式打开.spec文件,spec文件格式如下。具体spec的使用,可以查看官网
https://pyinstaller.readthedocs.io/en/stable/spec-files.html


 不修改.spec文件,直接运行以下语句

pyinstaller manage.spec

我们可以发现能够打包成功,但是在manage.exe所在路径下,在cmd中运行manage.exe runserver,会发现以下错误:

ImportError: No module named admin

这种错误的原因是 django.contrib.admin在django项目中是隐式导入的,所以pyinstaller打包时,并不能识别这种库或者模块,导致打包出来的.exe中并不包括这样隐式导入的库。

如果碰到这样的错误,只需要将这个库添加到.spec文件中的hiddenimports中即可。在接下来打包django项目缺少很多这样的隐式库,所以我.spec文件中一并修改了,修改如下:(如果缺少什么,直接在hiddenimports中加就可以了)


注:这里有个坑,特别需要关注

如果打包好的.exe运行后,报错ImportError: No module named apps,当你在hiddenimports中加入了'django.contrib.admin.apps',结果还是报同样的错误。这是因为添加的apps模块不完整,要在hiddenimports中加入以下全部的apps模块:(这些apps在django项目中的settings.py文件中可以全部找到,照着添加就可以了,另处还有context_processors模块,middleware模块也需要注意)

'django.contrib.admin.apps','django.contrib.auth.apps','django.contrib.contenttypes.apps',
'django.contrib.sessions.apps', 'django.contrib.messages.apps', 'django.contrib.staticfiles.apps',

以上hiddenimports弄好后,运行后会出现以下的错误
TemplateDoesNotExist  这个是因为没有找到templates文件.


可以根据错误提示将templates文件添加至对应的路径下,刷新即可。其中front是我工程下一个放所有前端东西的文件,templates是用来放html的一个文件夹。(所以具体的添加要根据错误提示是在哪里找不到就添加至哪里)

在第五步后,可以发现页面已经出来,但是发现页面没有css和js了
这是因为Pyinstaller 能找到templates(html files文件),但不能找到css和js文件。

我的具体操作是在django项目的settirngs.py文件中加入

STATIC_ROOT = os.path.join(BASE_DIR, 'front', 'static_root')

其中front是我的文件夹,static_root是我在front下创建的一个空子文件,用来收集工程中所有的静态文件。
在django项目路径下执行manage.py collectstatic会自动地将STATICFILES_DIRS列出的目录以及各个App下的static子目录的所有文件复制到STATIC_ROOT。因为复制过程可能会覆盖掉原来的文件,所以,一定不能把我们辛苦做出来静态文件放这边!
然后来到urls.py文件下,加入下面的一句话,加入的同时要导入static库

from django.conf.urls import static
urlpatterns += static.static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这句话的意思就是将STATIC_ROOT目录的静态文件复制一份到网页 STATIC_URL路径下

最后我们还需要将STATIC_ROOT中的静态文件打包到.exe中。这一步是在.spec文件中的datas中加入下面一个元组

datas=[(r'E:\G48\G48\front\static_root',r'.\front\static_root'), (r'E:\G48\G48\front\templates', r'.\front\templates')],

考虑到第5步,再这里我也直接将templates文件打包到了对应的文件。所以第五步就不用自己再复制templates文件到指定的文件夹了。

最后.spec文件看起来如下:


一切准备好后,执行下面语句就OK

pyinstaller manage.spec

如果在项目中有多进程,可以参考以下
https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessinghttps://stackoverflow.com/questions/24944558/pyinstaller-built-windows-exe-fails-with-multiprocessing

到此这篇关于pyinstaller打包django项目的实现步骤的文章就介绍到这了,更多相关pyinstaller打包django内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用glob库实现轻松应对文件和目录管理

    Python利用glob库实现轻松应对文件和目录管理

    Python提供了glob库,它允许我们根据特定模式匹配文件和目录,本文将详细介绍glob库的用法,并通过实例演示它的各种功能,需要的可以了解一下
    2023-07-07
  • Python实现校园网自动登录的脚本分享

    Python实现校园网自动登录的脚本分享

    这篇文章主要和大家分享一个Python脚本,leukemia实现校园网自动登录功能。文中的示例代码简洁易懂,快跟随小编一起动手尝试一下吧
    2022-06-06
  • 使用python PIL库实现简单验证码的去噪方法步骤

    使用python PIL库实现简单验证码的去噪方法步骤

    这篇文章主要介绍了使用python PIL库实现简单验证码的去噪方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python读取有密码的zip压缩文件实例

    python读取有密码的zip压缩文件实例

    今天小编就为大家分享一篇python读取有密码的zip压缩文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python如何压缩新文件到已有ZIP文件

    python如何压缩新文件到已有ZIP文件

    这篇文章主要为大家详细介绍了python如何压缩新文件到已有ZIP文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python机器学习使数据更鲜活的可视化工具Pandas_Alive

    python机器学习使数据更鲜活的可视化工具Pandas_Alive

    今天我分享大家一款非常棒的动画可视化工具:Pandas_Alive,它以 matplotlib 绘图为后端,不仅可以创建出令人惊叹的动画可视化,而且使用方法非常简单。本文详情如下
    2021-11-11
  • Python实现绘制自定义形状的词云示例

    Python实现绘制自定义形状的词云示例

    这篇文章主要介绍了Python实现绘制自定义形状的词云示例,通过将一段文本中出现频率高的单词按其出现频率大小以及颜色深浅排列成一个词云图形,从而更好地展示文本中的信息,需要的朋友可以参考下
    2022-10-10
  • Python实现列表删除重复元素的三种常用方法分析

    Python实现列表删除重复元素的三种常用方法分析

    这篇文章主要介绍了Python实现列表删除重复元素的三种常用方法,结合实例形式对比分析了Python针对列表元素的遍历、判断、转换等相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • 一文带你搞懂Python中的pyc文件

    一文带你搞懂Python中的pyc文件

    Python是一门解释性语言,没有严格意义上的编译和汇编过程。Pyc文件是py编译过程中产生的字节码文件,可以由虚拟机直接执行,是python将目标源码编译成字节码以后在磁盘上的文件形式。本文就来聊聊pyc文件的写入等只是,感兴趣的可以了解一下
    2022-12-12
  • python获取时间及时间格式转换问题实例代码详解

    python获取时间及时间格式转换问题实例代码详解

    这篇文章主要介绍了python获取时间及时间格式转换,需要的朋友可以参考下
    2018-12-12

最新评论