o(∩_∩)o设置代理访问博客(五)o(∩_∩)o --使用BeeWare打包应用

news2025/1/12 18:43:29

背景:

最近了解了一个新的打包框架BeeWare,据说他支持的平台要比nuitka更多。利用之前访问博客的脚本,来尝试一下打包windows应用程序。

BeeWare 从零开始

在这里插入图片描述

  1. 环境:python -m pip install briefcase

  2. 使用pycharm新建了一个名为beeware-venvconda虚拟环境,一个名为pythonProject的python项目

  3. 新建默认应用helloworld:briefcase new ,一直默认回车即可

  4. 开发模式运行程序。进入新创建的helloworld目录下执行命令 :briefcase dev

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase dev
    
    [helloworld] Starting in dev mode...
    ===========================================================================
    Hello, jom
    Hello, jom
    Hello, jom
    Hello, jom
    Stopping...
    
    
  5. 创建 briefcase create

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase create
    
    [helloworld] Generating application template...
    Assigning helloworld an application GUID of 93bbf2ae-12d0-580c-aeb0-965dc4c04b69
    Using app template: https://github.com/beeware/briefcase-windows-app-template.git, branch v0.3.19
    Cloning template 'https://github.com/beeware/briefcase-windows-app-template.git'...
    Using existing template (sha 8f153808429f87d7df42baf69db1d1c60fd62a88, updated Tue Jun 11 21:41:21 2024)
    
    [helloworld] Installing support package...
    Using support package https://www.python.org/ftp/python/3.8.10/python-3.8.10-embed-amd64.zip
    Downloading python-3.8.10-embed-amd64.zip...
         -------------------------------------------------- 100.0% • 00:08
    Unpacking support package... done
    
    [helloworld] Installing stub binary...
    Using stub binary https://briefcase-support.s3.amazonaws.com/python/3.8/windows/GUI-Stub-3.8-b5.zip
    Downloading GUI-Stub-3.8-b5.zip...
         -------------------------------------------------- 100.0% • 00:00
    Installing stub binary... done
    
    [helloworld] Installing application code...
    Installing src/helloworld... done
    
    [helloworld] Installing requirements...
    Collecting toga-winforms~=0.4.5
      Using cached toga_winforms-0.4.5-py3-none-any.whl.metadata (3.2 kB)
    Collecting pythonnet>=3.0.0 (from toga-winforms~=0.4.5)
      Using cached pythonnet-3.0.3-py3-none-any.whl.metadata (6.6 kB)
    Collecting toga-core==0.4.5 (from toga-winforms~=0.4.5)
      Using cached toga_core-0.4.5-py3-none-any.whl.metadata (5.5 kB)
    Collecting travertino>=0.3.0 (from toga-core==0.4.5->toga-winforms~=0.4.5)
      Using cached travertino-0.3.0-py3-none-any.whl.metadata (4.3 kB)
    Collecting importlib-metadata>=4.4.0 (from toga-core==0.4.5->toga-winforms~=0.4.5)
      Using cached importlib_metadata-8.0.0-py3-none-any.whl.metadata (4.6 kB)
    Collecting clr-loader<0.3.0,>=0.2.6 (from pythonnet>=3.0.0->toga-winforms~=0.4.5)
      Using cached clr_loader-0.2.6-py3-none-any.whl.metadata (1.4 kB)
    Collecting cffi>=1.13 (from clr-loader<0.3.0,>=0.2.6->pythonnet>=3.0.0->toga-winforms~=0.4.5)
      Using cached cffi-1.16.0-cp38-cp38-win_amd64.whl.metadata (1.5 kB)
    Collecting zipp>=0.5 (from importlib-metadata>=4.4.0->toga-core==0.4.5->toga-winforms~=0.4.5)
      Using cached zipp-3.19.2-py3-none-any.whl.metadata (3.6 kB)
    Collecting pycparser (from cffi>=1.13->clr-loader<0.3.0,>=0.2.6->pythonnet>=3.0.0->toga-winforms~=0.4.5)
      Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
    Using cached toga_winforms-0.4.5-py3-none-any.whl (379 kB)
    Using cached toga_core-0.4.5-py3-none-any.whl (128 kB)
    Using cached pythonnet-3.0.3-py3-none-any.whl (290 kB)
    Using cached clr_loader-0.2.6-py3-none-any.whl (51 kB)
    Using cached importlib_metadata-8.0.0-py3-none-any.whl (24 kB)
    Using cached travertino-0.3.0-py3-none-any.whl (16 kB)
    Using cached cffi-1.16.0-cp38-cp38-win_amd64.whl (181 kB)
    Using cached zipp-3.19.2-py3-none-any.whl (9.0 kB)
    Using cached pycparser-2.22-py3-none-any.whl (117 kB)
    Installing collected packages: zipp, travertino, pycparser, importlib-metadata, cffi, toga-core, clr-loader, pythonnet, toga-winforms
    Successfully installed cffi-1.16.0 clr-loader-0.2.6 importlib-metadata-8.0.0 pycparser-2.22 pythonnet-3.0.3 toga-core-0.4.5 toga-winforms-0.4.5 travertino-0.3.0 zipp-3.19.2
    Installing app requirements... done
    
    [helloworld] Installing application resources...
    
    [helloworld] Removing unneeded app content...
    Removing unneeded app bundle content... done
    
    [helloworld] Created build\helloworld\windows\app
    
  6. 构建 briefcase build

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase build
    
    [rcedit] RCEdit was not found; downloading and installing...
    Downloading rcedit-x64.exe...
         -------------------------------------------------- 100.0% • 00:01
    
    [helloworld] Building App...
    Renaming stub binary... done
    Setting stub app details... done
    
    [helloworld] Built build\helloworld\windows\app\src\Hello World.exe
    
    
  7. 运行 briefcase run, 添加参数-u 实时使用最新代码运行,帮助定位打包过程中的bug

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase run
    
    [helloworld] Starting app...
    ===========================================================================
    Hello, a
    Hello, a
    Hello, a
    Hello, a
    Hello, a
    Hello, a
    
    
  8. 打包 briefcase package 生成目录文件:dist\Hello World-0.0.1.msi ; 添加参数 --adhoc-sign 可以避免验签

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase package
    
    [wix] The WiX toolset was not found; downloading and installing...
    Downloading wix314-binaries.zip...
         -------------------------------------------------- 100.0% • 00:18
    Installing WiX... done
    
    *************************************************************************
    ** WARNING: No signing identity provided                               **
    *************************************************************************
    
        Briefcase will not sign the app. To provide a signing identity,
        use the `--identity` option; or, to explicitly disable signing,
        use `--adhoc-sign`.
    
    *************************************************************************
    
    [helloworld] Building MSI...
    Compiling application manifest...
    Compiling... done
    Compiling application installer...
    helloworld.wxs
    helloworld-manifest.wxs
    Compiling... done
    Linking application installer...
    Linking... done
    
    [helloworld] Packaged dist\Hello World-0.0.1.msi
    
    
  9. 安装后,可以在路径:C:\Program Files\Jane Developer\Hello World找到该应用
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  10. 更新后,将新代码更新到老的安装包中 briefcase update

    (D:\work\beeware-venv) D:\Qredsun\replay_sys\demo\pythonProject\helloworld>briefcase update
    
    [helloworld] Updating application code...
    Installing src/helloworld... done
    
    [helloworld] Removing unneeded app content...
    Removing unneeded app bundle content... done
    
    [helloworld] Application updated.
    
    
  11. 将跑阅读量的脚本放在app.py同级目录下,修改app.py内容如下:
    在这里插入图片描述

    """
    My first application
    """
    
    import toga
    from toga.style import Pack
    from toga.style.pack import COLUMN, ROW
    
    from helloworld.readCounts import run,stop
    
    
    def greeting(name):
        if name:
            return name
        else:
            return "qq_17328759"
    
    class HelloWorld(toga.App):
        def startup(self):
            """Construct and show the Toga application.
    
            Usually, you would add your application to a main content box.
            We then create a main window (with a name matching the app), and
            show the main window.
            """
            main_box = toga.Box()
    
    
            name_label = toga.Label(
                "CSDN 博客账号: ",
                style=Pack(padding=(0, 5)),
            )
            self.name_input = toga.TextInput(style=Pack(flex=1))
    
            name_box = toga.Box(style=Pack(direction=ROW, padding=5))
            name_box.add(name_label)
            name_box.add(self.name_input)
    
            self.run_button = toga.Button(
                "加油! 明天排名更靠前。",
                on_press=self.start_work,
                style=Pack(padding=5),
            )
    
            self.down_button = toga.Button(
                    "加油! 明天排名更靠前。",
                    on_press=self.stop_work,
                    style=Pack(padding=5),
                    )
            self.down_button.enabled=False
    
            main_box.add(name_box)
            main_box.add(self.run_button)
            main_box.add(self.down_button)
    
            from toga import Position
            from toga import Size
            position = Position(400,400)
            win_size = Size(480, 240)
            self.main_window = toga.MainWindow(title=self.formal_name, position=position, size=win_size)
            self.main_window.content = main_box
            self.main_window.enabled=True
    
        def start_work(self, widget):
            csdn_user = greeting(self.name_input.value)
            self.main_window.info_dialog(
                    "Hi!",
                    f'增加用户 {csdn_user} 博客阅读量 {self.main_window.position}',
                    )
            self.name_input.value = csdn_user
            self.name_input.enabled=False
            run(csdn_user)
            self.down_button.enabled=True
            self.run_button.enabled=False
    
        def stop_work(self, widget):
            '停止当前任务'
            self.main_window.info_dialog(
                    "Hi!",
                    '停止后台刷量任务',
                    )
            stop()
            self.down_button.enabled=False
            self.run_button.enabled=True
            self.name_input.enabled=True
    
    
    
    def main():
        return HelloWorld()
    
    
  12. 重复更新代码、重新打包的操作,END!

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

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

相关文章

【HTML入门】第二十一课 - 【实战】做一个简单的数据表格

这一小节&#xff0c;我们继续练习纯HTML&#xff0c;开发一个简单的数据表格吧。就像这样&#xff1a; 目录 1 设计需求分析 2 用到的标签 3 实战代码 1 设计需求分析 做之前&#xff0c;我们仍然是分析一下这张图&#xff0c;以便更好的更快的开发出来。 分2个大部分第一个…

掌控板(为Python编程学习而生)文章目录+入门教程 简介

前言 文章目录 掌控入门系列教程目录 【Mind】掌控板入门教程01 “秀”出我创意 【Mind】掌控板入门教程02 趣味相框 【Mind】掌控板入门教程03 节日的祝福【Mind】掌控板入门教程04 迷你动画片【Mind】掌控板入门教程05 心情灯【Mind】掌控板入门教程06 多彩呼吸灯【Mind】掌…

word预览方式---iframe,Microsoft Office Online、xDoc、Google Docs

提示&#xff1a;word预览方式—iframe 文章目录 [TOC](文章目录) 前言一、Microsoft Office Online二、xDoc三、Google Docs四、预览组件总结 前言 使用vue/cli脚手架vue create创建 一、Microsoft Office Online https://view.officeapps.live.com/op/view.aspx?src二、xDo…

java的命令执行漏洞揭秘

0x01 前言 在Java中可用于执行系统命令常见的方式有两种&#xff0c;API为&#xff1a;java.lang.Runtime、java.lang.ProcessBuilder 0x02 java.lang.Runtime GetMapping("/runtime/exec")public String CommandExec(String cmd) {Runtime run Runtime.getRunti…

关于#define的使用方法总结

文章目录 #define 预处理指令一、#define宏定义二、查看预处理文件三、#define 的使用方法四、C语言宏中“#”和“##”的用法五、常见的宏定义总结六、常考题目 #define 预处理指令 #define 是 C 和 C 编程语言中的预处理指令&#xff0c;用于定义宏&#xff08;macro&#xf…

JVM系列 | 对象的消亡——HotSpot的设计细节

HotSpot 的细节实现 文章目录 HotSpot 的细节实现OopMap 与 根节点枚举根节点类型及说明HotSpot中的实现 OopMap 与 安全点安全点介绍如何保证程序在安全点上&#xff1f; 安全区域记忆集与卡表记忆集卡表 写屏障并发的可达性分析&#xff08;与用户线程&#xff09;并发可达性…

计算机底层知识点(一)晶体管与CPU执行指令之间的联系

该文主要通过详细介绍晶体管在CPU执行指令时的作用。本文所讲解例子为NPN型二极管。这里简单介绍一下&#xff0c;NPN是共阳极&#xff0c;即两个NP结的P结相连为基极&#xff0c;另两个N结分别做集电极和发射极&#xff0c;发射极电流 集电极电流 基极电流。 图5 LED两脚分别…

【Vue3】具名插槽

【Vue3】具名插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

纯技术手段实现内网穿透,免注册免收费

纯技术手段实现内网穿透&#xff0c;免注册免收费 一、内网穿透二、方法分类2.1 基于隧道协议的内网穿透2.2 基于反向代理的内网穿透2.3 基于SSH的内网穿透具体工具的分类如下&#xff1a;基于隧道协议基于反向代理基于SSH 三、本文方法四、具体操作4.1 安装服务端4.2 安装客户…

【Linux 网络】链路层

文章目录 链路层1 以太网1.1 以太网帧格式1.2 MAC地址1.3 MTU 2. ARP协议2.1 ARP协议的作用2.2 ARP数据报格式2.3 ARP的流程 其他协议3. DNS协议3.1 域名3.2 输入URL后的事情 4. ICMP协议4.1 ICMP 功能都有啥&#xff1f;4.2 基于ICMP的命令ping命令 5. NAT协议5.1 NAT技术背景…

android13关机按钮 去掉长按事件 去掉启动到安全模式 删除关机长按

总纲 android13 rom 开发总纲说明 目录 1.前言 2.界面效果 3.问题分析 4.代码修改 5.编译替换运行 6.彩蛋 1.前言 在Android操作系统中,关机按钮通常具有多种功能,包括短按关机、长按启动语音助手或重启设备等。在某些情况下,用户或设备管理员可能希望自定义关机按…

爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(一)

目录 基础常识 Base64伪加密 python代码实现 摘要算法 1. MD5 1.1 JavaScript 实现 1.2 Python 实现 2. SHA 2.1 JavaScript 实现 2.2 Python 实现 2.3 sha系列特征 3. HMAC 3.1 JavaScript 实现 3.2 Python 实现 对称加密 一. 常见算法归纳 1. 工作模式归纳 …

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南&#xff1a;《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南&#xff0c;提供了从职前…

使用Python实现栅格划分(渔网)

在QGIS中&#xff0c;“渔网”&#xff08;Fishnet&#xff09;是指一种创建规则网格&#xff08;通常是矩形或正方形&#xff09;的工具&#xff0c;这些网格可以用于空间数据的采样、分区或作为其他地理空间分析的基础。渔网工具可以生成一个由多边形组成的图层&#xff0c;每…

文件解析漏洞—IIS解析漏洞—IIS7.X

在IIS7.0和IIS7.5版本下也存在解析漏洞&#xff0c;在默认Fast-CGI开启状况下&#xff0c;在一个文件路径/xx.jpg后面加上/xx.php会将 “/xx.jpg/xx.php” 解析为 php 文件 利用条件 php.ini里的cgi.fix_pathinfo1 开启IIS7在Fast-CGI运行模式下 在 phpstudy2018 根目录创建…

4、postgresql拓展表空间

base是数据保存目录&#xff0c; OID&#xff1a;对象标识符&#xff0c;无符号4字节整数&#xff0c; 数据库的oid在pg_database中&#xff0c;表&#xff0c;索引&#xff0c;序列等OID存储在pg_class中 表空间&#xff1a;pg最大的逻辑存储单元&#xff0c;表索引数据库都…

Linux安装Zabbix7.0并且使用外置Mysql数据库

MySQL 数据库服务版本。必须至少为 8.00.30 # rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm # dnf clean all #安装zabbix # dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts za…

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ &#x1f30f;反向代理&#xff08;Reverse Proxy&#xff09;是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求&#xff0c;并将其转发给后端服务器&#xff0c;然后将后端服务器的响应返回给客户端。客…

dfs,CF 196B - Infinite Maze

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/196/B 二、解题报告 1、思路分析 考虑如何判断一条路径可以无限走&#xff1f; 我们对朴素的网格dfs改进&#xff0c;改进为可以dfs网格外的区域 如果存在某个…

Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记

概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…