【Python】打包与发布(Packaging and distributing projects)

news2024/11/17 23:38:04

以Unix/macOS系统为例。

前提准备:确保pip为最新版本,可使用以下命令来更新pip:

python3 -m pip install --upgrade pip

一、创建一个简单的项目
我们在目录packaging_tutorial下进行操作。
项目名称为:example_package_wayne
整个文件结构为:
在这里插入图片描述

__init__.py:设置为空(简单起见)
calculator.py:实际的模块,这里是一个四则运算,内容为:

def calc(x, y, operator):
    result = 0
    if operator == "+":
        result = x + y
    if operator == "-":
        result = x - y
    if operator == "*":
        result = x * y
    if operator == "/":
        result = x / y
    return result

pyproject.toml:

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "example_package_wayne"
version = "0.0.1"
authors = [
  { name="Example Author", email="author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
]

[project.urls]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"

README.md:

# Example Package

This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.

LICENSE:

Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

二、生成发行版存档
上面列出的文件将自动包含在您的源代码发行版中。

确保安装了最新版本的PyPAbuild,可使用以下命令来更新:

python3 -m pip install --upgrade build

现在可以在pyproject. toml所在的目录下运行如下命令:

python3 -m build

在这里插入图片描述

该命令执行完后,会在dist目录中生成如下红框内的两个文件:
在这里插入图片描述

其中,tar.gz文件是源发行版(a source distribution ),而.whl文件是构建发行版(a built distribution)。

三、本地安装/卸载该包&测试

3.1安装
packaging_tutorial目录下,执行如下命令:

pip3 install dist/example_package_wayne-0.0.1-py3-none-any.whl

若显示以下内容,则表示安装该包成功!
在这里插入图片描述

3.2 测试

packaging_tutorial目录下,新建目录tests,在该目录tests下创建文件test_calclator.py,其内容为(这里介绍了三种导入与使用该包的方式):

# 三种导入包的方式
""" 方式一
import example_package_wayne.calculator  

print(example_package_wayne.calculator.calc(8,4,"+"))
print(example_package_wayne.calculator.calc(8,4,"-"))
print(example_package_wayne.calculator.calc(8,4,"*"))
print(example_package_wayne.calculator.calc(8,4,"/"))
"""

""" 方式二
from example_package_wayne import calculator

print(calculator.calc(8,4,"+"))
print(calculator.calc(8,4,"-"))
print(calculator.calc(8,4,"*"))
print(calculator.calc(8,4,"/"))
"""

# 方式三
from example_package_wayne.calculator import calc

print(calc(8,4,"+"))
print(calc(8,4,"-"))
print(calc(8,4,"*"))
print(calc(8,4,"/"))

在这里插入图片描述

3.3卸载

packaging_tutorial目录下,执行如下命令:

pip3 uninstall example_package_wayne

在这里插入图片描述

参考文献:
Packaging Python Projects — Python Packaging User Guide

6. Modules — Python 3.11.3 documentation

Packaging and distributing projects — Python Packaging User Guide

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

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

相关文章

【yolov5系列】yolov5目标检测的原理梳理+核心代码解析

打算写yolov5源码阅读和总结&#xff0c;已经打算了一年&#xff0c;如今已经更新到yolov8&#xff0c;只能说自己行动太慢了&#xff0c;哭泣(๑>؂<๑&#xff09;。趁着看要yolov8一起赶紧把yolov5总结总结。 一、Yolov5的网络结构 模型主要分为3部分 backbone&#x…

Maven 打包插件 maven-jar-plugin

文章目录 指定版本生成可执行 Jar准备依赖&#xff0c;并指定依赖位置自动下载依赖的 Jar 文件 打包时排除文件与其他常用打包插件比较 本文是对 maven-jar-plugin 常用配置的介绍&#xff0c;更详细的学习请参照 Apache Maven JAR Plugin 官方文档 这是 maven 生命周期 packa…

Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架

一、接口基础   接口测试是对系统和组件之间的接口进行测试&#xff0c;主要是效验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP&#xff0c;RPC&#xff0c;Webservice&#xff0c;Dubbo&#xff0c;RESTful等类型。 …

实用工具 | 语音文本对齐MFA的安装及使用

Montreal Forced Aligner&#xff08;MFA&#xff09;[1]是一个用于将音频和文本进行对齐的工具。它可以用于语音识别、语音合成和发音研究等领域。MFA支持多种语言和语音&#xff0c;用户可以根据需要自定义训练模型。 本博客介绍如何使用MFA对音频和文本进行对齐&#xff0c…

计算机网络实验:交换机划分Vlan配置

目录 前言实验目的实验内容实验过程总结 前言 计算机网络是当代信息技术的重要组成部分&#xff0c;也是现代社会的基础设施之一。为了提高计算机网络的性能和安全性&#xff0c;网络管理员需要对网络进行合理的规划和设计&#xff0c;包括对网络拓扑、地址分配、路由协议、交…

TP-LINK XDR6078 WiFi6路由器 简单开箱评测

TL-XDR6078易展版AX6000双频WiFi6路由器 简单开箱测评&#xff0c;新房快装修好了&#xff0c;先装上WiFi&#xff0c;挑了一会选中这个了&#xff0c;双2.5G电口&#xff0c;6000Mbps无线速率&#xff0c;还支持端口汇聚等等功能&#xff0c;感觉还不错。 TP-LINK XDR3040 Wi…

R语言 tidyverse系列学习笔记(系列2)表格的处理

创建一个得分表 score install.packages("dplyr") library(dplyr)install.packages("tibble") library(tibble)install.packages("stringr") library(stringr)score tibble(IDc("1222-1","2001-0","3321-1",&qu…

从JMeter Cookie管理器开始,轻松掌握接口测试技能!

目录 【前言】 【1. 添加Cookie管理器】 【2. 登录接口获取Cookie】 【3. Cookie关联】 【4. 动态修改Cookie值】 【结论】 【附录】 【前言】 在接口测试中&#xff0c;我们经常需要对Cookie进行处理和关联&#xff0c;来模拟用户在浏览器中的操作。特别是在登录和权限…

chatgpt赋能python:Python名字的由来

Python名字的由来 Python是一门高级编程语言&#xff0c;它的名字来源于一个非常有趣的故事。接下来的文章将介绍如何命名Python&#xff0c;并且揭示这个名字的真正含义。 Guido van Rossum设计Python Python是由Guido van Rossum设计的。在1989年&#xff0c;Guido在荷兰国…

用Flask-Login库和阿里云短信推送服务实现网站注册登录功能

诸神缄默不语-个人CSDN博文目录 本文介绍如何用Flask-Login库和阿里云短信推送服务实现网站注册登录功能。 大致逻辑是在注册和找回密码时调用阿里云短信服务&#xff0c;登录时使用手机号密码登录&#xff08;别的安全功能还没有加&#xff09;。 很多代码都是直接由ChatGP…

Zinx框架学习 - 连接管理

Zinx - V0.9 连接管理 每个服务器的能够处理的最大IO数量是有限的&#xff0c;根据当前服务器能开辟的IO数量决定&#xff0c;最终决定权是内存大小现在我们要为Zinx框架增加链接个数的限定&#xff0c;如果超过⼀定量的客户端个数&#xff0c;Zinx为了保证后端的及时响应&…

浏览器断点调试技巧

一、前言 日常开发中&#xff0c;当业务测试数据展示有问题时&#xff0c;我们需要快速去排查问题出现原因&#xff1b;但看了自己写的逻辑&#xff0c;很自信的觉得没问题但最终展示和逻辑对不上。这个需要我们便可以利用浏览器断点调试功能&#xff0c;来逐步调试对比逻辑来…

IDEA 终端命令行设置

一、说明 在使用 IDEA 进行程序开发时&#xff0c;需要使用到终端 Terminal 的功能&#xff0c;便于能够快速使用 shell 命令&#xff0c;进行各种相关的操作。 这些操作可以包括代码的版本控制、程序的打包部署等等 比如&#xff0c;前后端的集成开发环境&#xff08;IDEA、We…

探究Cache缓存功能---【pytest】

前言 pytest运行完用例之后会生成一个 .pytest_cache的缓存文件夹&#xff0c;用于记录用例的ids和上一次失败的用例。 1、跑自动化时经常会出现这样一个情况&#xff0c;一轮自动化跑完后零星出现了几个失败测试用例&#xff0c;无法断定失败的原因&#xff0c;所以可能需要重…

2023新版Spring6全新讲解-核心内容之事务管理

Spring核心之事务 一、JdbcTemplate JdbcTemplate是Spring框架对JDBC操作进行的封装&#xff0c;可以简化方便对数据库的操作。 1.数据库表结构 准备一张普通的表 CREATE TABLE t_student (id int NOT NULL AUTO_INCREMENT,name varchar(32) DEFAULT NULL,age int DEFAULT N…

网络安全面试题大全(整理版)+附答案

随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 作为一个安全老鸟&#xff0c;工作这么多年&…

Vue.js 中的过渡动画是什么?如何使用过渡动画?

Vue.js 中的过渡动画是什么&#xff1f;如何使用过渡动画&#xff1f; 在 Vue.js 中&#xff0c;过渡动画是一种在元素插入、更新或删除时自动应用的动画效果&#xff0c;可以为应用程序增加一些动态和生动的效果。本文将介绍 Vue.js 中过渡动画的概念、优势以及如何使用过渡动…

谈“污”色变!如何应对测序中常见污染

微生物群落研究正在彻底改变人类对微生物学的理解&#xff0c;但是微生物污染的DNA存在于各种操作中包含从取样到测序结束。其中常用的DNA提取试剂盒和其他实验室试剂中也存在污染&#xff0c;其严重影响从微生物量较低的样品中获得的结果。 DNA污染的可能来源包括分子生物学级…

【嵌入式环境下linux内核及驱动学习笔记-(14)linux总线、设备、驱动模型之platform】

目录 1、新驱动架构的导入1.1 传统驱动方式的痛点1.2 总线设备驱动架构 2、platform 设备驱动2.1 platform总线式驱动的架构思想2.2 platform _device相关的数据类型2.2.1 struct platform_device2.2.2 struct platform_device_id2.2.3 struct resource2.2.4 struct device 2.3…

VSCode离线安装插件

一、前言 工作环境屏蔽外网&#xff0c;无法在VSCode客户端在线VSCode插件商店下载插件。因此&#xff0c;只能下载插件文件&#xff0c;并离线安装。 二、下载VSCode插件 1. 在VSCode插件商店中搜索需要的插件 2. 下载vsix格式插件 三、离线安装 VSCode 插件 1. 打开菜单Vi…