Pyinstaller 打包 django 项目如何将命令行参数加入?

起因

Pyinstaller 打包 django 项目,打包成 manage.exe 后用命令行 cmd
manage.exe runserver 0.0.0.0:8001 --noreload 来运行感觉很不方便。

希望能够直接把命令行参数也打包进去,直接运行 exe 。我走了些弯路,但最终实现了。

弯路

我看到有人说 新建一个 main.py 在里面用 os.system :

import osos.system('manage.exe runserver 0.0.0.0:8001 --noreload')

看起来可行,在 manage.py 外包裹一层,但我尝试以后失败了,打包出的是一个这样的结果:
错误的结果
运行无反应。没去深究为啥失败,毕竟对于打包我也不是太熟悉。

一种可行办法

接下来是我自己的办法。
其实也很简单,找到 main 函数,修改参数列表。

我的 Django 的 manage.py

def main():os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings')try:from django.core.management import execute_from_command_lineexcept ImportError as exc:raise ImportError("Couldn't import Django. Are you sure it's installed and ""available on your PYTHONPATH environment variable? Did you ""forget to activate a virtual environment?") from excexecute_from_command_line(sys.argv)if __name__ == '__main__':main()

注意这句:

 execute_from_command_line(sys.argv)

从函数名也能知道,这是一个实现从命令行执行的函数,传入的正是 命令行参数列表 sys.argv
我们只要修改 sys.argv,就可以固定参数列表了。

但这里是有个小坑在的,如果是初学者可能会犯错。

sys.argv 是参数列表,不是字符串,所以不可以直接把 ‘runserver 0.0.0.0:8001 --noreload’ 这串字符 append 进来,而要一个个来。

所以上面代码可以改为:

        ) from excprint(sys.argv)sys.argv.append('runserver')sys.argv.append('0.0.0.0:8001')sys.argv.append('--noreload')print('增加参数后:')for a in sys.argv:print(a, end=' ')execute_from_command_line(sys.argv)

当然,写成列表再 append 上也行的。

    argv = ['runserver', '0.0.0.0:8001', '--noreload']sys.argv.append(argv)

然后 pyinstaller -w -F manage.py 就会生成 manage.exe 了。

不过打包成 exe ,后续可能还会遇到其它问题,比如运行起来后,资源找不到的问题,需要一一解决,manage.spec 我只能提醒一下。

我觉得 Django 似乎没必要打包成 exe 。。。它用作网站欸,用 dos 界面运行就行了。

第二种办法

如果不一定要生成 exe,只需要方便运行,其实 写个 bat 脚本可能更方便一些。代码都不用动。
直接加一个 bat 脚本运行 manage.py ,然后发送脚本快捷方式到桌面。

xxx.bat 脚本参考:

@echo offREM 这里加了一个临时环境变量
set sslpath=D:\xxx\anaconda3-2020\Library\bin
set path=%sslpath%;%path%REM 此处用全局路径会更合适,避免python升级影响。
python manage.py runserver 0.0.0.0:8001pause

这样还会有个黑黑的 dos 界面,可能会被人不小关闭了。可以再写个 vbs 调用刚才的 bat 脚本,隐藏 dos 界面:

set shell=wscript.createObject("wscript.shell")
run=shell.Run("xxx.bat, 0)

这样的话,你想要看到进程,就只能再后台看到一个 python 进程了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis之删除策略

文章目录 前言一、过期数据二、数据删除策略2.1定时删除2.2惰性删除2.3 定期删除2.4 删除策略比对 三、逐出算法3.1影响数据逐出的相关配置 总结 前言 Redis的常用删除策略 一、过期数据 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可…

web基础入门和PHP语言基础入门 一

web基础入门和php语言基础入门 一 WEB简介与HTTP入门WEB简介HTTP 简介HTTP 请求报文:请求方法:请求头部:(常见的请求头)HTTP 响应报文:响应状态码:Cookie HTML入门学习什么是HTML什么是标记语言…

【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能

【深入了解pytorch】PyTorch扩展:如何使用PyTorch的扩展功能 PyTorch扩展:展示如何使用PyTorch的扩展功能1. 自定义损失函数2. 自定义数据加载器3. 自定义优化器总结PyTorch扩展:展示如何使用PyTorch的扩展功能 PyTorch作为一个开源的深度学习框架,在研究和应用领域广受欢…

PHP入门基础教程 - 专栏导读

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…

【LeetCode 算法】Find And Replace in String 字符串中的查找与替换-线性模拟

文章目录 Find And Replace in String 字符串中的查找与替换问题描述:分析代码线性模拟 Tag Find And Replace in String 字符串中的查找与替换 问题描述: 你会得到一个字符串 s (索引从 0 开始),你必须对它执行 k 个替换操作。替换操作以三…

Floyd算法

正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能&#xff…

openGauss学习笔记-42 openGauss 高级数据管理-触发器

文章目录 openGauss学习笔记-42 openGauss 高级数据管理-触发器42.1 语法格式42.2 参数说明42.3 示例 openGauss学习笔记-42 openGauss 高级数据管理-触发器 触发器会在指定的数据库事件发生时自动执行函数。 42.1 语法格式 创建触发器 CREATE TRIGGER trigger_name { BEFORE…

Swagger-ui在idea中的使用

1.添加依赖 <!--添加swagger2相关概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相关功能--><de…

Linux学习之基本指令一

在学习Linux下的基本指令之前首先大家要知道Linux下一切皆目录&#xff0c;我们的操作基本上也都是对目录的操作&#xff0c;这里我们可以联想我们是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;类比学习更容易理解。 目录 01.ls指令 02. pwd命令 0…

SpringBoot登录、退出、获取用户信息的session处理

1、登录方法&#xff1a;login PostMapping("/user/login")public ResponseVo<User> login(Valid RequestBody UserLoginForm userLoginForm,HttpSession session) {ResponseVo<User> userResponseVo userService.login(userLoginForm.getUsername(), …

sql A表(含有部分B表字段) 向B表插入A表数据

今天遇到一个数据库插入问题 向表中插入 生产状态 为 2 的数据 但生产状态为改为12 的所有数据 查看网上的评论 参考 insert into b (a,b,c) select ‘1’,‘2’,c from a where a1 这样就可以a,b字段是插入指定某个值,而C字段则用表a的c字段. 最后解决了。忽然想起原来也有这…

实现Python对.json文件内容的读取和写入

要实现Python对.json文件内容的读取和写入&#xff0c;可以使用json库。 首先&#xff0c;需要安装json库&#xff1a; pip install json 然后&#xff0c;可以编写以下代码来实现对.json文件内容的读取和写入&#xff1a; import json# 读取json文件 with open(data.json, …

PS实现多个图片转化GIF动画

PS实现多个图片转化为GIF动画步骤 一、导入图片素材1.打开PS软件&#xff0c;点击 [文件] --- [脚本] ---[将文件载入堆栈]2.选择图片3.导入成功 二、打开时间轴1.点击[窗口]---[时间轴]2.选择创建帧动画3.创建帧动画 三、创建动画1.复制帧。2.设置帧的内容。3.修改图片停留的时…

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 …

推荐 4 个 yyds 的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 开源的 Markdown 编辑器 2. MetaGPT 3. SuperAGI 4. 一个舒适的笔记平台 01 开源的 Markdown 编辑器 Cherry 是腾讯开源的 Markdown 编辑器&#xff0c;基于 Javascript具有轻量简洁、易于扩展等特点&#xff0c; 它可以运行在浏览器或服…

UVM学习知识点

这里是引用 include 和 import pkg区别 1.作用 include与C语言中类似&#xff0c;用于在一个文件中插入另一个文件&#xff1b;import用于在一个作用域中引入一个package&#xff08;或其中的内容&#xff09;&#xff0c;使得这些内容在当前作用域中可以不添加其所在的packag…

常用游戏运营指标DAU、LTV及参考范围

文章目录 前言运营指标指标范围参考值留存指标的意义总结 前言 作为游戏人免不了听到 DAU 、UP值、留存 等名词&#xff0c;并且有些名词听起来还很像&#xff0c;特别是一款上线的游戏&#xff0c;这些游戏运营指标是衡量游戏业务绩效和用户参与度的重要数据&#xff0c;想做…

Tesseract用OpenCV进行文本检测

我没有混日子&#xff0c;只是辛苦的时候没人看到罢了 一、什么是Tesseract Tesseract是一个开源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一种技术&#xff0c;它可以识别和解析图像中的文本内容&#xff0c;使计算机能够理解并处理…

Maven之mirrorof范围

mirrorOf 是 central 还是 * 的问题 在配置阿里对官方中央仓库的镜像服务器时&#xff0c;我们使用到了 <mirror> 元素。 <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>…

vmalert集成钉钉告警

vmalert通过在alert.rules中配置告警规则实现告警&#xff0c;告警规则语法与Prometheus兼容&#xff0c;依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警&#xff0c;以下步骤&#xff1a; 1、构建vmalert 从源代码构建vmalert&#xff1a; git clone https://…