python代码生成可执行文件

以下面转换图片尺寸的代码resize_images.py为例:

代码功能:原始图片放在img文件夹中,然后运行代码可以转换成指定分辨率,保存在同一目录下的新生成的文件夹中

import os
import sys
import cv2
from datetime import datetime
from tqdm import tqdm

def resize_image(image_path, target_size):
    """Resize the image to the target size."""
    image = cv2.imread(image_path)
    resized_image = cv2.resize(image, (target_size, target_size))
    return resized_image

def process_images_in_directory(directory, target_size):
    """Resize all images in the specified directory to the target size and save them in the output directory."""
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    output_directory = os.path.join(os.getcwd(), f"resized_{target_size}x{target_size}_{timestamp}")
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
    
    image_files = [f for f in os.listdir(directory) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff'))]
    total_images = len(image_files)
    print(f"Processing images from directory: {directory}")
    print(f"Total images to process: {total_images}")
    
    for idx, filename in enumerate(tqdm(image_files, desc="Resizing images", unit="image")):
        image_path = os.path.join(directory, filename)
        resized_image = resize_image(image_path, target_size)
        
        # Save the resized image
        resized_image_path = os.path.join(output_directory, filename)
        cv2.imwrite(resized_image_path, resized_image)
    
    print(f"Resized images are saved in {output_directory}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python resize_images.py <target_size>")
        sys.exit(1)
    
    try:
        target_size = int(sys.argv[1])
    except ValueError:
        print("Target size must be an integer.")
        sys.exit(1)
    
    # Get the directory of images, which is in the current directory under 'img'
    current_directory = os.getcwd()
    image_directory = os.path.join(current_directory, 'img')
    
    if not os.path.exists(image_directory):
        print(f"Image directory {image_directory} does not exist.")
        sys.exit(1)
    
    process_images_in_directory(image_directory, target_size)

要将你的Python项目打包,使其在其他计算机上运行而不需要用户手动配置环境,你可以使用几种方法。其中一种有效的方法是使用 PyInstaller 来创建一个可执行文件。PyInstaller 可以将Python程序及其所有依赖项打包到一个单独的可执行文件中,适用于Windows、Linux和MacOS。

一、安装PyInstaller

pip install pyinstaller

二、Pylnstaller介绍

PyInstaller 是一个强大的工具,它可以将 Python 程序打包成独立的可执行文件。它支持多种参数来控制打包过程。下面是一些常用的 PyInstaller 参数:

基本选项

  • --name=NAME:指定输出文件的名称。
  • --onefile-F:将所有文件打包成一个单独的可执行文件。
  • --onedir-D:将所有文件打包到一个目录(默认方式)。
  • --windowed-w:不显示控制台窗口(适用于 GUI 应用)。
  • --console-c:显示控制台窗口(默认方式,适用于命令行应用)。

路径和搜索相关

  • --paths=DIR:在分析时添加搜索路径,可以指定多个。
  • --additional-hooks-dir=HOOKSPATH:添加外部的钩子(hooks)目录。
  • --runtime-tmpdir=PATH:指定解压缩临时文件的目录。
  • --specpath=DIR:放置生成的 spec 文件的目录。

数据和资源

  • --add-data=<SRC;DEST or SRC:DEST>:添加数据文件。
  • --add-binary=<SRC;DEST or SRC:DEST>:添加二进制文件。
  • --upx-dir=DIR:指定 UPX 压缩工具的路径,如果安装了 UPX。
  • --upx-exclude=FILE:指定不用 UPX 压缩的文件。

钩子和导入

  • --hidden-import=MODULENAME:指定隐藏的导入,即代码中没有显式导入的模块。
  • --exclude-module=MODULENAME:排除特定的模块。
  • --collect-submodules=MODULENAME:收集指定模块的所有子模块。

输出和调试

  • --log-level=LEVEL:设置日志级别(例如 INFO, DEBUG, WARN)。
  • --clean:清理 PyInstaller 缓存和临时文件,然后退出。
  • --noconfirm:覆盖输出目录(如果存在)而不询问。
  • --debug:生成用于调试的可执行文件。

配置和版本信息

  • --version-file=FILE:包含版本信息的文件,用于资源。
  • --manifest=FILE:包含 Windows manifest 文件,可以控制某些权限和系统兼容性。

其他

  • --key=KEY:用于加密 Python 字节码的密钥。
  • --icon=ICON_FILE:为可执行文件指定一个图标文件。

使用示例

例如,你可以通过以下命令创建一个没有控制台的窗口应用,包含外部数据和图标:

pyinstaller --onefile --windowed --icon=app.ico --add-data="datafile.txt;." your_script.py

这条命令将生成一个单文件的应用,不显示控制台窗口,包含一个图标和一个数据文件。

这些参数可以帮助你根据特定需求自定义 Python 应用的打包过程。更详细的参数说明可以通过命令 pyinstaller --help 查看或访问 PyInstaller 的官方文档。

三、使用 PyInstaller 打包你的脚本:

你可以运行以下命令来创建一个独立的可执行文件。这个命令将分析你的脚本,找出所有必要的库,并将它们打包。

pyinstaller --onefile resize_images.py

PyInstaller 将在 dist 文件夹中创建可执行文件。你可以在这个文件夹中找到名为 resize_images.exe 的文件。
在这里插入图片描述
生成可执行文件后,可以放到任何地方运行,不需要额外的环境,上面的build文件夹也不需要

四、测试可执行文件

可执行文件双击就可以运行,不过要传入分辨率的值,所以不能直接双击运行,除非python代码里默认了目标分辨率,不用传入,那就可以直接双击运行。

下面是带参数运行的方式

1. 方式一:在cmd终端中运行

在这里插入图片描述

2. 编写脚本运行

为了简洁,新建一个exe文件夹放可执行文件
在这里插入图片描述
“双击转换成512”脚本内容,其它的同理可得

@echo off
.\exe\resize_images.exe 512
pause

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第4集《大乘起信论》

请大家打开《讲义》第七页。 解释标题有别释跟合释&#xff0c;在合释当中又分两科。第一个明心&#xff0c;先明白我们内在的种性&#xff0c;这个种性就会产生不同的业力、不同的果报。在明白这个道理以后&#xff0c;我们应该怎么去扭转这个种性呢&#xff1f;就讲到修学的…

贝锐蒲公英异地组网方案:实现制药设备远程监控、远程运维

公司业务涉及放射性药品的生产与销售&#xff0c;在全国各地拥有20多个分公司。由于药品的特殊性&#xff0c;在日常生产过程中&#xff0c;需要符合药品监管规范要求&#xff0c;对各个分部的气相、液相设备及打印机等进行监管&#xff0c;了解其运行数据及工作情况。 为满足这…

MobileNet系列论文阅读笔记(MobileNetV1、MobileNetV2和MobileNetV3)

目录 引言MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications摘要Prior Work -- 先前工作MobileNet Architecture— MobileNet结构Depthwise Separable Convolution—深度可分离卷积Network Structure -- 网络结构 总结 MobileNetV2: Invert…

19 Shell编程之条件语句

目录 19.1 条件测试操作 19.1.1 文件测试 19.1.1 整数值比较 19.1.3 字符串比较 19.1.4 逻辑测试 19.2 if条件语句 19.2.1 if语句的结构 19.2.2 if语句应用示例 19.3 case分支语句 19.3.1 case语句的结构 19.3.2 case语句应用示例 19.1 条件测试操作 Shell环境根据命令执行后…

Javase.认识异常

认识异常 【本章目标】1. 异常的概念与体系结构1.1 异常的概念1.2 异常的体系结构1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.2 try-catch捕获并处理2.3.3 finally2.4 异常的处理流程 3. 自定义异常类 【本章目标】 异常概念与体系结构异常的…

日常工作中常用的管理工具

日常工作中常用的管理工具 SWOT分析法&#xff1a; 帮你清晰地把我全局&#xff0c;分析自己在资源方面的优势域劣势&#xff0c;把握环境提供的机会&#xff0c;防范可能存在的风险与威胁&#xff0c;对我们的成功有非常重要的意义 PDCA循环规则&#xff1a; 每一项工作&#…

安卓设备优雅的命令 adb 以及 优秀的控制 scrcpy

一、背景 如果有多台安卓设备&#xff0c;并为这些设备安装软件&#xff0c;一个个使用u盘再加上鼠标操作虽然可以做到&#xff0c;但是大概率比较麻烦。试想下&#xff0c;如果坐在电脑旁边&#xff0c;就能鼠标在电脑上点点就能解决问题&#xff0c;是多么优雅的一件事情。 …

Leetcode Hot100之双指针

1. 移动零 题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。解题思路 双指针遍历一遍即可解决: 我们定义了两个指针 i 和 j&#xf…

win10手动安装stable-diffusion-webui

目录 1.python下载安装 2.git下载安装 3.stable-diffusion-webui下载 4.安装s-d-webui的依赖包&#xff08;用国内镜像提速&#xff09; 5.git下载的stable-diffusion-webui&#xff0c;依赖包提示已安装&#xff0c;但运行webui-user.bat后&#xff0c;又开始下载 6.修…

LabVIEW项目管理中如何平衡成本、时间和质量

在LabVIEW项目管理中&#xff0c;平衡成本、时间和质量是实现项目成功的关键。通过制定详细的项目计划、合理分配资源、严格控制进度、进行质量保证和灵活应对变化&#xff0c;项目管理者可以有效地协调这三者的关系&#xff0c;确保项目按时、按质、按预算完成。 1. 制定详细…

向“黑公关”开战,比亚迪悬赏500万征集恶意诋毁线索

近日&#xff0c;比亚迪品牌及公关处总经理李云飞在微博发文&#xff0c;面向社会公开征集黑公关证据。 微博中&#xff0c;李云飞写道&#xff1a;“近期&#xff0c;我们收到多方提醒&#xff1a;某车企在使用黑公关手段&#xff0c;对我司品牌及产品进行贬低、拉踩和恶意诋…

[IMX6ULL驱动开发]-Linux对中断的处理(三)

前两篇文章主要是理论上的知识&#xff0c;此文章主要内容为代码上的编写以及思路等 [IMX6ULL驱动开发]-Linux对中断的处理(一) [IMX6ULL驱动开发]-Linux对中断的处理(二) 目录 设备树中的操作 中断控制器 设备树中使用中断 编程思路 设备树相关 驱动程序相关 设备树中的…

网页基础三剑客

目录 一、网页开发技术 1&#xff0e;HTML 2&#xff0e;CSS 3&#xff0e;JavaScript 二、网页的结构 三、 网页的分类 1&#xff0e;静态网页 2&#xff0e;动态网页 1&#xff0e;jQuery 2&#xff0e;AJAX 3&#xff0e;DHTML 2.3.4 网页数据的格式 1&#xf…

刷代码随想录有感(111):动态规划——零钱兑换II

干&#xff0c;被上了一课。注意题干&#xff0c;到底是求能装最大价值的方案还是装满这个容量共有多少种方法。他们的公式都不同&#xff0c;最大价值的方案是&#xff1a; dp[j] max(dp[j], dp[j - weight[i]] value[i]); 而装满有多少种方法是&#xff1a; dp[j] dp[j…

yum的概念、相关命令、ftp http部署步骤;NFS共享文件操作步骤

目录 yum 配置文件 缓存功能操作步骤 创建并配置本地仓库文件 yum相关命令 yum install __ yum repolist yum list __ yum info __ yum search __ yum whatprovides __ yum remove __ yum -y update __ yum history yum grouplist yum groupinstall "__&q…

小程序 获取插件用户openpid?

接口英文名 getPluginOpenPId 功能描述 通过 wx.pluginLogin 接口获得插件用户标志凭证 code 后传到开发者服务器&#xff0c;开发者服务器调用此接口换取插件用户的唯一标识 openpid。 调用方式 HTTPS 调用 第三方调用 调用方式以及出入参和HTTPS相同&#xff0c;仅是调…

AXI学习笔记

文章目录 AXI口诀&#xff1a;AXI三种总线&#xff0c;三种接口&#xff0c;一个协议背景知识一、 AMBA&#xff1a;二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型&#xff08;AXI4、AXI4-lite、AXI4-stream&#xff09;2.3.1 AXI通道&#xff08;5通道&am…

通信系统概述

1.定义 通信系统&#xff08;也称为通信网络&#xff09;是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…

『 Linux 』 进程间通信 - 匿名管道

文章目录 什么是管道匿名管道的直接原理pipe( )系统调用接口匿名管道代码示例匿名管道的特征总结 什么是管道 管道(Pipe) 是一种基本的进程间通信(IPC)机制,允许一个进程与另一个进程之间进行数据传输; 管道工作方式类似于生活中的水管因此命名为管道,数据从一端流入另一段流出…

技术分享 | 基于 API 解析的 Python 爬虫

最近各大高校纷纷翻拍 Coincidence 抖肩舞&#xff0c;需要对这种流行现象进行数据分析。数据分析首先需要有数据&#xff0c;本文介绍了爬取 B 站相应视频的评论、弹幕、播放量、点赞数等数据的方法。爬虫有多种实现方法&#xff0c;大型的网络爬虫多基于成熟的爬虫框架&#…