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

news2024/7/6 19:42:46

起因

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

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

弯路

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

import os

os.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_line
    except 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 exc
    execute_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 exc
    print(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 我只能提醒一下。

第二种办法

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

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

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

相关文章

Linux —— 基础I/O

一,背景介绍 狭义的文件存放在磁盘上,广义上在Linux下一切皆文件;磁盘上的文件一般为永久存储的外设,本质上对文件的操作,即为对外设的输入和输出(简称I/O);空文件并不是不占磁盘文件…

Xamarin.Android实现手写板的功能

目录 1、背景说明2、实现效果3、代码实现3.1 整体思路3.2 核心绘画类-PaintView.cs3.3 对话框类-WritePadDialog.cs3.4 前端实现类-MainActivity3.5 布局文件3.5.1 write_pad.xml3.5.2 activity_main布局文件 4、知识总结5、代码下载6、参考资料 1、背景说明 在实际使用过程中…

【动态规划刷题 6】 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含手续费

买卖股票的最佳时机含冷冻期 链接: 买卖股票的最佳时机含冷冻期 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票…

【赠书活动|第四期《互联网广告系统:架构、算法与智能化》】

文章目录 内容简介作者简介读者对象大咖推荐抽奖方式 广告平台的建设和完善是一项长期工程。例如,谷歌早于2003年通过收购Applied Semantics开展Google AdSense 项目,而直到20年后的今天,谷歌展示广告平台仍在持续创新和提升。广告平台是负有…

2024软考系统架构设计师论文写作要点

一、写作注意事项 系统架构设计师的论文题目对于考生来说,是相对较难的题目。一方面,考生需要掌握论文题目中的系统架构设计的专业知识;另一方面,论文的撰写需要结合考生自身的项目经历。因此,如何将自己的项目经历和专业知识有机…

内网穿透:实现公网访问内网群晖NAS的方法

公网远程访问内网群晖NAS 7.X版 【内网穿透】 文章目录 公网远程访问内网群晖NAS 7.X版 【内网穿透】前言1. 在群晖控制面板找到“终端机和SNMP”2. 建立一条连接公网数据隧道3. 获取公网访问内网群晖NAS的数据隧道入口 前言 群晖NAS作为应用较为广泛的小型数据存储中心&#…

RabbitMQ学习——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计

目录 引出点对点(simple)Work queues 一对多发布订阅/fanout模式以登陆验证码为例pom文件导包application.yml文件rabbitmq的配置生产者生成验证码,发送给交换机消费者消费验证码 topic模式配置类增加配置生产者发送信息进行发送控制台查看 rabbitmq回调确认配置类验…

Shopee虾皮买家号注册时需要注意什么问题

虾皮是一家在线购物平台,如果您打算在虾皮上注册一个买家账号,以下是一些需要注意的问题: 账号安全:确保您选择一个安全的密码,并定期更改密码,以保护您的账号免受未经授权的访问。 个人信息:…

idea报“Could not autowire. No beans of ‘UserMapper‘ type found. ”错解决办法

原因和解决办法 1.原因 idea具有检测功能,接口不能直接创建bean的,需要用动态代理技术来解决。 2.解决办法 1.修改idea的配置 1.点击file,选择setting 2.搜索inspections,找到Spring 3.找到Spring子目录下的Springcore 4.在Springcore的子目录下…

uni-app使用vue语法进行开发注意事项

目录 uni-app 项目目录结构 生命周期 路由 路由跳转 页面栈 条件编译 文本渲染 样式渲染 条件渲染 遍历渲染 事件处理 事件修饰符 uni-app 项目目录结构 组件/标签 使用(类似)小程序 语法/结构 使用vue 具体项目目录如下: 生命…

三步免费接入 Claude 2.0,支持多账号轮询!

Claude 2.0 已经发布了一段时间,经过我的非暴力测试,比 ChatGPT 3.5 的能力是要强的,有更强大的上下文 100k,相当于 10 万字的上下文记忆,非常适合处理长文档和大的代码段,虽说有些方面略逊色 ChatGPT 4.0 &#xff0c…

日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理

日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理 目录 日常工具 之 一些 / 方便好用 / 免费 / 在线 / 工具整理 1、在线Json ,可以在线进行json 格式验证,解析转义等操作 2、Gif动图分解,在线把 gif 图分解成一张张单图 3、在线P…

仓储10、20代电子标签接口文档

标签注册 仓储10代注册 右下角左下角组合按键触发注册 注册成功:右上角绿灯变红灯,并显示信号强度的数值 ​ 仓储20代注册 右下角左下角组合按键触发注册 注册成功:右上角绿灯变红灯,并显示信号强度的数值 ​ 查询电子标签信息…

dinput8.dll导致游戏打不开的解决方法,快速修复dinput8.dll文件

当你尝试启动某个游戏时,如果遇到dinput8.dll文件缺失或损坏的错误提示,可能会导致游戏无法正常运行。dinput8.dll是DirectInput API的一部分,它提供了游戏手柄、键盘和鼠标等输入设备的支持。本文将详细介绍dinput8.dll的作用、导致游戏无法…

核心板如何选择合适的封装?

▍引言 核心板如何选择合适的封装? 核心板是一种集成了CPU、内存、存储、网络等功能的微型计算机模块,可以作为嵌入式系统的核心部件,或者作为开发板的扩展模块。核心板的封装方式决定了它与底板或者开发板的连接方式,影响着核心…

PP-ChatOCR:基于文心大模型的通用图像关键信息抽取利器,开发提效50%!

在日常生活中,大家经常会遇到图像关键信息自动抽取的场景,比如身份证拍照上传自动识别、发票拍照上传自动报销等。 在这个领域,现有的AI技术方案已经能解决一部分需求,但是依然存在一些痛点,比如发票的种类样式极其繁多…

低代码、逻辑、规则、数据分析、协同工具集合,解决企业不同需求

大家好,我是为IT部门兄弟操碎了心的“软件部长”,随着企业IT建设的不断发展,软开企服也在经历了数十年的项目中积累了丰富的经验,为此开始了IT软件的研发之路,之后就一发不可收拾。。。才有了现在出现在市面上的JVS。 …

CVPR 2023 | Attention-Based Point Cloud Edge Sampling

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 CVPR, ICCV, ECCV, NeurIPS等)。本次介绍的论文是: CVPR 2023 | Attention-Based Point Cloud Edge Sampling CVPR 2023 | …

Vue2嵌入HTML页面空白、互相传参、延迟加载等问题解决方案

一、需求分析 最近做的一个用H5加原生开发的html项目,现需要集成到Vue2.0项目里面来。遇到的相关问题做个记录和总结,以便能帮到大家避免踩坑。 二、问题记录 1、页面空白问题 将html页面通过iframe的方式嵌入进来之后,发现页面是空白的&am…

Why Test?

Why Test? 可测试性(testability)是一种设计的属性,衡量了全面测试制造设计的正确性的难易程度。原始的设计和测试过程是分开的,只有在设计周期的结尾考虑测试。而DFT将测试和设计融合在一起。 来自foundary的device…