如何打包Python Web项目实现免安装一键启动,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联是一家成都做网站、网站设计,提供网页设计,网站设计,网站制作,建网站,定制网站建设,网站开发公司,从2013年成立是互联行业建设者,服务者。以提升客户品牌价值为核心业务,全程参与项目的网站策划设计制作,前端开发,后台程序制作以及后期项目运营并提出专业建议和思路。
Python 有诸多优秀的 Web 开发框架供我们使用,比如Django、Flask、Sanic。正常的情况下,我们基于这些 Web 框架开发好了网站,最终都会使用 Nginx 搭配 uWSGI 或gunicorn 将其部署在 Linux 服务器上,这样,用户就可以通过 绑定的域名或 IP 地址访问。
往往很多场景,我们面对的就不是一个正常的情况。正常的情况下一切环境的问题都不是问题,因为有运维的伙伴帮我们处理好了所有环境的问题,从Python特定版本的安装,到特定依赖库的安装,再到服务的配置。一切都不需要操心。但是,如果所有的这些问题都需要自己操心呢?那可真是一个灾难性的问题。Docker的出现解决了一部分的问题,但是对于完全小白而言,docker的安装和使用,又成为了一个问题。州的先生在开发MrDoc觅道文档的时候,就遇到了这个问题。如果要源码安装 MrDoc,那么需要:安装Python(基本不会出问题)
pip安装依赖库(非常容易出问题)
安装依赖的第三方软件包(非常容易出问题)
很多想体验一下 MrDoc 的小伙伴,直接就死在了第二步,各种报错无所适从。有 MrDoc 交流群里的热心伙伴制作了docker镜像,这解决了一定的环境问题,但是对于真正零基础的计算机小白而言,命令行还是自带恐惧属性。怎么办呢?能不能让Python编写的Web项目像 PHP 或GO 语言编写的Web服务一样可以直接启动呢?在互联网上逛荡了老半天,发现老伙计——PyInstaller可以实现这个功能。PyInstaller是Python中一个用于将Python程序打包为可执行文件的第三方模块。
州的先生之前经常使用它将PyQt5编写的桌面图形界面程序打包分发。来看看它在打包Web程序上的应用。PyInstaller官方提供了一个打包Django项目的文档,其链接为:
https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Executable-From-Django按照这个文档,我们根据项目的具体情况,运行下述命令:
pyinstaller --name=mysite mysite/manage.py
就会得到一个dist文件夹,里面包含了运行Django项目的所有文件,我们打开命令行界面,使用xxx.exe文件就可以达到像正常使用:但是,很大概率是运行不起来的,报错的信息,不是缺少模块,就是缺少静态文件。
我们需要显式地告诉PyInstaller,哪些包、哪些模块、哪些文件需要一起打包进去。
在上一次运行 pyinstaller 命令之后,文件夹下会生成一个.spec后缀的配置文件,其实质是一个Python文件,我们对其进行修改。
import sys
sys.setrecursionlimit(5000)
在文件第3行的位置,添加上述2行代码,用于避免pyinstaller索引模块层级的错误。然后,在datas列表中,将Django项目的静态文件目录、媒体文件目录、以及其他使用到的文件目录全都以元组的形式添加进去。这会让PyInstaller直接将这些文件打包到最后生成的文件夹中。
接着,在hidedenimports列表中,将Django项目的应用模块路径也添加进去。可以根据每次生成的报错来一个一个添加,但是那样太浪费时间了,还不如直接都添加进去。修改好了之后,我们把之前生成的build目录和dist目录删除,使用spec文件调用Pyinstaller命令:等待一会儿,整个Django项目就打包好了,其完整的打包文件如下所示:
在浏览器上访问:
127.0.0.1:8000
就可以看到我们的MrDoc觅道文档了:
为了方便使用,我们还可以写一个bat脚本,双击即可启动它,免去打开命令行界面输入命令的繁琐:
start ./mrdoc.exe runserver
这样,一个免安装、一键启动的Django网站应用就打包制作完成了。关于如何打包Python Web项目实现免安装一键启动问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
当前题目:如何打包PythonWeb项目实现免安装一键启动
当前URL:
http://bjjierui.cn/article/jjjsgj.html