Python程序打包 |《Python基础教程》第18章笔记
《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930
第18章 程序打包
程序可以发布后,你可能想先将它打包。如果程序只包含一个.py文件,这可能不是问题。然而,如果用户不是程序员,即便是将简单的Python库放到正确的位置或调整PYTHONPATH也可能超出了其能力范围。用户通常希望只需双击安装程序,再按安装向导说的做就能将程序安装好。
Python程序员有较低级的接口可以使用。Setuptools是用于发布Python包的工具包,让你能够使用Python轻松地编写安装脚本。这些脚本可用于生成可发布的归档文档,供用户编译和安装你编写的库。
本章重点介绍Setuptools,因为这是每个Python程序员都要用到的工具。实际上,Setuptools并非只能用于创建基于脚本的Python安装程序,还可用于编译模块。另外,通过将其与py2exe和py2app结合起来使用,还可创建Windows和macOS平台上的独立的可执行程序。
18.1 Setuptools基础
“Python打包用户指南”(packaging.python.org)和Setuptools官网(http://setuptools.readthedocs.io)有很多相关的文档。使用Setuptools可完成很多任务,只需编写像代码清单18-1这样简单的脚本即可。
代码清单18-1 简单的Setuptools安装脚本(setup.py)
from setuptools import setup
setup(name='Hello',version='1.0',description='A simple example',author='Magnus Lie Hetland',py_modules=['hello'])
以上代码中,函数setup的所有参数都是可选的。请确保setup.py与简单模块hello.py在同一目录下,然后执行python setup.py build,示例输出如下。
running build
running build_py
creating build
creating build/lib
copying hello.py -> build/lib
如输出所示,在命令build执行过程中,Setuptools创建了一个名为build的目录,其中包含子目录lib,然后将hello.py复制到了这个子目录中。目录build相当于工作区,Setuptools在其中组装包并编译扩展库。
如果执行安装命令install,则会自动运行命令build,然后将模块hello.py复制到PYTHONPATH指定的特定目录中,在此过程中会创建一个.egg文件,这是一个独立的Python包。目前没有标准的uninstall命令,因此需要手工卸载安装的模块。
18.2 打包
通过对setup.py稍作修改,你可以用它来创建Windows安装程序、RPM包、egg文件、wheel文件等(wheel将最终取代egg)。本节只介绍如何创建源代码归档文件.tar.gz。
执行命令python setup.py sdist(sdist = source distribution),进行源代码归档。注意,归档规范建议在setup.py中添加author_email选项,在当前目录中添加README.md。命令执行完成后,在当前目录下应该会多出一个dist目录。在这个目录中有一个名为Hello-1.0.tar.gz的文件。你可将其分发给他人,而对方可将其解压缩,再使用脚本setup.py进行安装。
18.4 使用py2exe创建可执行程序
py2exe是Setuptools的一个扩展(可通过pip来安装它),让你能够创建可执行的Windows程序(.exe文件)。这在你不想给用户增加单独安装Python解释器的负担时很有用。py2exe包可用来创建带GUI(参见第12章)的可执行文件。下面将使用这个非常简单的示例:
print('Hello, world!')
input('Press <enter>')
创建一个空目录,再将这个文件(hello.py)放到这个目录中,然后创建一个类似于下面的setup.py文件:
from distutils.core import setup
import py2exe
setup(console=['hello.py'])
运行脚本:python setup.py py2exe
这将创建一个控制台应用程序(dist\hello.exe)。
有关py2exe的工作原理和高级用法的详细信息,请参阅py2exe官网(http://www.py2exe.org)。如果你使用的是macOS,py2app提供了类似的功能(http://pythonhosted.org/py2app)。
要让别人能够使用pip安装你开发的包,必须向Python Package Index(PyPI)注册它,详见标准库文档。
相关文章:
Python程序打包 |《Python基础教程》第18章笔记
《Python基础教程》第1章笔记👉https://blog.csdn.net/holeer/article/details/143052930 第18章 程序打包 程序可以发布后,你可能想先将它打包。如果程序只包含一个.py文件,这可能不是问题。然而,如果用户不是程序员࿰…...
图论 之 迪斯科特拉算法求解最短路径
文章目录 题目743.网络延迟时间3341.到达最后一个房间的最少时间I 求解最短路径的问题,分为使用BFS和使用迪斯科特拉算法,这两种算法求解的范围是有区别的 BFS适合求解,边的权值都是1的图中的最短路径的问题 图论 之 BFS迪斯科特拉算法适合求…...
掌握Spring开发_常用注解详解
1. 前言 1.1 写作目的 本文旨在全面解析Spring框架中常用的注解,帮助开发者更好地理解和使用这些注解,提高开发效率和代码质量。Spring框架提供了丰富的注解,简化了依赖注入、AOP、事务管理、Web开发等多个方面的开发工作。通过本文的学习,读者可以掌握这些注解的使用方法…...
华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下: 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件(Firmware࿰…...
Kubernetes的Ingress和Service有什么区别?
在Kubernetes中,Ingress和Service是两个不同的概念,它们在功能、作用范围、应用场景等方面存在明显区别,具体如下: 功能 Ingress:主要用于管理集群外部到内部服务的HTTP和HTTPS流量路由。它可以根据域名、路径等规则…...
洛谷B3619(B3620)
B3619 10 进制转 x 进制 - 洛谷 B3620 x 进制转 10 进制 - 洛谷 代码区: #include<algorithm> #include<iostream> #include<vector> using namespace std;int main(){int n,x;cin >> n >> x;vector<char> arry;while(n){if(…...
vue组件,父子通信,路由,异步请求后台接口,跨域
1.组件注册 1.1局部注册 局部注册组件---1.导入import 组件对象名 from 组件网页路径 export default{ name:"名称", data(){return {}}, created(){}, …...
详解分布式ID实践
引言 分布式ID,所谓的分布式ID,就是针对整个系统而言,任何时刻获取一个ID,无论系统处于何种情况,该值不会与之前产生的值重复,之后获取分布式ID时,也不会再获取到与其相同的值,它是…...
.NET + Vue3 的前后端项目在IIS的发布
目录 一、发布准备 1、安装 IIS 2、安装 Windows Hosting Bundle(.NET Core 托管捆绑包) 3、安装 IIS URL Rewrite 二、项目发布 1、后端项目发布 2、前端项目发布 3、将项目部署到 IIS中 三、网站配置 1、IP配置 2、防火墙配置 3、跨域配置…...
软件测试之压力测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…...
矩阵-矩阵置零
矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为0 。请使用 原地 算法。在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本
十九、表单脚本 表单脚本 JavaScript 较早的一个用途是承担一部分服务器端表单处理的责任。虽然 Web 和 JavaScript 都已经发展了很多年,但 Web 表单的变化不是很大。由于不能直接使用表单解决问题,因此开发者不得不使用JavaScript 既做表单验证…...
【C# 数据结构】队列 FIFO
目录 队列的概念FIFO (First-In, First-Out)Queue<T> 的工作原理:示例:解释: 小结: 环形队列1. **FIFO?**2. **环形缓冲队列如何实现FIFO?**关键概念: 3. **环形缓冲队列的工作过程**假设…...
论文笔记-WWWCompanion2024-LLM as Data Augmenters for Cold-Start Item Recommendation
论文笔记-WWW Companion 2024-Large Language Models as Data Augmenters for Cold-Start Item Recommendation 大语言模型作为冷启动项目推荐的数据增强器摘要1.引言2.前言3.LLMs作为数据增强3.1增强数据生成3.2成对比较损失 4.实验4.1实验设置4.2结果和分析4.3超参数实验 5.总…...
Java 语法新特性(Records、Pattern Matching、Sealed Classes)深度解析(11/17/21)✨
一、Records(Java 16) 📝 核心价值:简化不可变数据载体的定义 // 传统POJO vs Record public record User(String name, int age) {} // 自动生成:构造方法/equals()/hashCode()/toString() User user new User(&qu…...
QUdpSocket的readyRead信号只触发一次
问题 QUdpSocket的readyRead信号只触发一次。 原因 on_readyRead槽函数里必须读出现有数据后,才能触发新的事件。 解决办法 在on_readyRead槽函数里取出数据。 void MainWindow::on_readyRead() {qDebug() << "on_readyRead in";while (m_udp…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
测试data_management函数
测试data_management函数 这是我最近正在开发的AI工具信息平台的部门功能模块测试,基于streamlit架构。整理出来与大家分享,也为我以后自己回溯找到资源。 为了测试 data_management 函数并结合 Excel 文件中的 “Tools” 表单内容,我们需要…...
微信小程序---计划时钟设计与实现
微信小程序-计划时钟已上线,欢迎各位小伙伴的测试和使用~(微信小程序搜计划时钟即可使用) 在这篇博客中,我们将探讨如何在微信小程序中设计和实现一个任务管理功能,该功能允许用户添加、删除和查看任务。任务管理系统的核心是基于日期和时间的任务管理,可以设置任务的开…...
深度学习之图像回归(二)
前言 这篇文章主要是在图像回归(一)的基础上对该项目进行的优化。(一)主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…...
革命性APK安装器:如何在Windows上智能运行安卓应用?
革命性APK安装器:如何在Windows上智能运行安卓应用? 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 厌倦了臃肿的安卓模拟器?想要在…...
m4s-converter:5分钟掌握B站缓存视频无损转换技巧
m4s-converter:5分钟掌握B站缓存视频无损转换技巧 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾在B站缓存了珍贵的学习视频…...
rmlint输出格式大全:JSON、CSV、Shell脚本的灵活应用
rmlint输出格式大全:JSON、CSV、Shell脚本的灵活应用 【免费下载链接】rmlint Extremely fast tool to remove duplicates and other lint from your filesystem 项目地址: https://gitcode.com/gh_mirrors/rm/rmlint rmlint是一款超快速的文件系统重复文件清…...
如何为Chrome调试器编写集成测试:puppeteer测试框架实战
如何为Chrome调试器编写集成测试:puppeteer测试框架实战 【免费下载链接】vscode-chrome-debug Debug your JavaScript code running in Google Chrome from VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-chrome-debug 在现代Web开发中&…...
HarmonyOS 6 ArkTS ImageAnimator 组件使用文档
文章目录核心 API1. 关键属性2. 动画状态 AnimationStatus3. 生命周期回调4. 控制按钮功能完整代码功能说明总结核心 API 1. 关键属性 属性名作用.images([])设置动画帧,传入图片资源数组.duration()设置动画总时长(单位:毫秒).…...
Phi-3-mini-4k-instruct-gguf部署教程:基于Docker镜像的vLLM服务启动与健康检查
Phi-3-mini-4k-instruct-gguf部署教程:基于Docker镜像的vLLM服务启动与健康检查 1. 准备工作与环境搭建 1.1 了解Phi-3-mini-4k-instruct模型 Phi-3-Mini-4K-Instruct是一个38亿参数的轻量级开源模型,采用GGUF格式提供。这个模型经过Phi-3数据集训练&…...
Unity WebGL发布后,为什么在Chrome里打不开?手把手教你配置Nginx和解决跨域问题
Unity WebGL项目在Chrome中无法运行的深度解决方案 当你满怀期待地双击刚刚构建的Unity WebGL项目的index.html文件,却发现Chrome浏览器中一片空白,控制台满是红色错误信息——这种挫败感每个Unity开发者都经历过。本文将带你深入理解问题根源࿰…...
告别暴力搜索:用Python和LKH-2.0.9高效求解31城市TSP问题(附完整代码)
突破传统搜索瓶颈:用LKH算法秒解31城TSP难题的Python实战 当面对31个城市旅行商问题时,传统暴力搜索需要计算30!/2≈1.310种可能路径。即使每秒能处理百万亿(10⁵)种排列,也需要410⁹年——比宇宙年龄还要长28倍。这正是我们需要LKH算法的原…...
B细胞代谢与功能的时空解码:免疫调控网络中的新哨点
摘要:B淋巴细胞作为适应性免疫应答的核心组分,其功能不仅局限于抗体生成。近年来,随着单细胞多组学、基因编辑及代谢分析技术的整合应用,学界对B细胞的分化命运、功能异质性、代谢重编程及其在病理状态下的双向调控作用有了颠覆性…...
K8s Pod 网络通信原理
Kubernetes Pod 网络通信原理揭秘 在云原生时代,Kubernetes(K8s)已成为容器编排的事实标准。Pod作为K8s的最小调度单元,其网络通信机制是集群高效运行的核心。理解Pod如何跨节点通信、如何与外部世界交互,不仅能帮助开…...
