如何打包Python Web项目实现免安装一键启动的方法

作者:恋习Python 时间:2022-08-16 19:28:48 

一、现状

Python 有诸多优秀的 Web 开发框架供我们使用,比如Django、Flask、Sanic。正常的情况下,我们基于这些 Web 框架开发好了网站,最终都会使用 Nginx 搭配 uWSGI 或gunicorn 将其部署在 Linux 服务器上,这样,用户就可以通过 绑定的域名或 IP 地址访问。

如何打包Python Web项目实现免安装一键启动的方法

是的,这是正常的情况。

往往很多场景,我们面对的就不是一个正常的情况。正常的情况下一切环境的问题都不是问题,因为有运维的伙伴帮我们处理好了所有环境的问题,从Python特定版本的安装,到特定依赖库的安装,再到服务的配置。一切都不需要操心。

但是,如果所有的这些问题都需要自己操心呢?那可真是一个灾难性的问题。 Docker的出现解决了一部分的问题,但是对于完全小白而言,docker的安装和使用,又成为了一个问题。

如何打包Python Web项目实现免安装一键启动的方法

州的先生在开发MrDoc觅道文档的时候,就遇到了这个问题。如果要源码安装 MrDoc,那么需要:

  • 安装Python(基本不会出问题)

  • pip安装依赖库(非常容易出问题)

  • 安装依赖的第三方软件包(非常容易出问题)

很多想体验一下 MrDoc 的小伙伴, 直接就死在了第二步 ,各种报错无所适从。

有 MrDoc 交流群里的热心伙伴制作了docker镜像,这解决了一定的环境问题,但是 对于真正零基础的计算机小白而言,命令行还是自带恐惧属性。

如何打包Python Web项目实现免安装一键启动的方法

怎么办呢? 能不能让Python编写的Web项目像 PHP 或GO 语言编写的Web服务一样可以直接启动呢?

在互联网上逛荡了老半天,发现老伙计——PyInstaller可以实现这个功能。

二、打包

PyInstaller是Python中一个用于将Python程序打包为可执行文件的第三方模块。 州的先生之前经常使用它将PyQt5编写的桌面图形界面程序打包分发。来看看它在打包Web程序上的应用。

PyInstaller官方提供了一个打包Django项目的文档,其链接为: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Executable-From-Django

按照这个文档,我们根据项目的具体情况,运行下述命令:


<span><span style="font-size: 14px;">
pyinstaller --name=mysite mysite/manage.py
</span>
</span>

就会得到一个dist文件夹,里面包含了运行Django项目的所有文件,我们打开命令行界面,使用xxx.exe文件就可以达到像正常使用:


<span>
<span style="font-size: 14px;">
python manage.py
</span>
</span>

一样的效果。比如运行runserver服务:


<span>
<span style="font-size: 14px;">
xxx.exe runserver
</span>
</span>

但是, 很大概率是运行不起来的,报错的信息,不是缺少模块,就是缺少静态文件。

我们需要显式地告诉PyInstaller,哪些包、哪些模块、哪些文件需要一起打包进去。

在上一次运行 pyinstaller 命令之后,文件夹下会生成一个 .spec后缀的配置文件 ,其实质是一个Python文件,我们对其进行修改。


<span>
<span style="font-size: 14px;">
import sys
</span>
</span>

<span>
<span style="font-size: 14px;">
sys.setrecursionlimit(5000)
</span>
</span>

在文件第3行的位置,添加上述2行代码,用于 避免pyinstaller索引模块层级的错误

如何打包Python Web项目实现免安装一键启动的方法

然后,在datas列表中, 将Django项目的静态文件目录、媒体文件目录、以及其他使用到的文件目录全都以元组的形式添加进去。 这会让PyInstaller直接将这些文件打包到最后生成的文件夹中。

如何打包Python Web项目实现免安装一键启动的方法

接着,在hidedenimports列表中, 将Django项目的应用模块路径也添加进去。 可以根据每次生成的报错来一个一个添加,但是那样太浪费时间了,还不如直接都添加进去。

修改好了之后,我们把之前生成的build目录和dist目录删除,使用spec文件调用Pyinstaller命令:


<span>
<span style="font-size: 14px;">pyinstaller MrDoc.spec
</span>
</span>

等待一会儿,整个Django项目就打包好了,其完整的打包文件如下所示:

如何打包Python Web项目实现免安装一键启动的方法

三、效果

打包好之后,我们打开命令行界面,输入命令:


<span>
<span style="font-size: 14px;">
mrdoc.exe runserver
</span>
</span>

就启动了Django Web网站,如下图所示:

如何打包Python Web项目实现免安装一键启动的方法

在浏览器上访问: 127.0.0.1:8000 就可以看到我们的MrDoc觅道文档了:

如何打包Python Web项目实现免安装一键启动的方法

为了方便使用,我们还可以写一个bat脚本,双击即可启动它,免去打开命令行界面输入命令的繁琐:


<span>
<span style="font-size: 14px;">
start ./mrdoc.exe runserver
</span>
</span>

这样,一个 免安装、一键启动的Django网站应用 就打包制作完成了。

来源:http://mp.weixin.qq.com/s?__biz=MzIzNTg3MDQyMQ==&mid=2247486890&idx=2&sn=b6e9f1f2a13d125dfdbac003881578ef

标签:打包,Python,Web项目,一键启动
0
投稿

猜你喜欢

  • 10种检测Python程序运行时间、CPU和内存占用的方法

    2023-08-04 16:28:14
  • WEB2.0网页制作标准教程(8)CSS布局入门

    2007-09-11 13:21:00
  • python中Tkinter实现分页标签的示例代码

    2021-10-26 11:30:05
  • python自定义类并使用的方法

    2022-08-16 14:36:29
  • 关于CSS中字号控制的兼容性研究

    2010-01-23 12:48:00
  • python内置堆的具体实现

    2022-12-18 08:39:43
  • Pytorch 和 Tensorflow v1 兼容的环境搭建方法

    2022-04-05 12:19:06
  • PHP缓存集成库phpFastCache用法

    2023-11-14 02:35:19
  • zookeeper python接口实例详解

    2023-03-11 01:34:48
  • pandas多级分组实现排序的方法

    2022-05-06 14:16:11
  • 关于Python的GPU编程实例近邻表计算的讲解

    2022-08-06 22:35:37
  • 将DataTable作为存储过程参数的用法实例详解

    2024-01-27 14:23:24
  • 一文详解websocket在vue2中的封装使用

    2024-05-02 17:08:54
  • Golang中map的深入探究

    2024-04-26 17:23:35
  • 一文详解CNN 解决 Flowers 图像分类任务

    2023-02-28 22:23:39
  • vue3.0 上手体验

    2024-04-30 10:26:49
  • Python3+Selenium+Chrome实现自动填写WPS表单

    2023-12-08 05:47:59
  • Ubuntu安装Jupyter Notebook教程

    2021-03-12 03:14:58
  • 在Python的Django框架中创建和使用模版

    2022-05-06 04:15:28
  • 打造设计你自己的字体 Ⅲ

    2008-03-14 07:52:00
  • asp之家 网络编程 m.aspxhome.com