发布自己的python包

news2025/1/19 3:37:44

文章目录

    • 概要
    • 模块和包
    • 发布自己的package
      • 创建目录结构
      • 发布

概要

提示:这里可以添加技术概要

例如:

openAI 的 GPT 大模型的发展历程。

模块和包

在Python中,程序的划分可以分为三个层次:脚本、模块和包

  • script:独立的Python代码文件,可以被执行或作为其他程序的一部分进行调用。通常,脚本是一个单独的.py文件,其中包含可执行的代码
  • module:模块通常包含一些函数、类、变量和常量等,可以被其他程序导入和调用。在Python中,导入模块是一种常见的代码组织方式,可以将代码分解成更小的、可重用的模块
  • package:通常包含一个或多个模块文件和一个名为__init__.py的初始化文件。包可以是一个文件夹,也可以是一个压缩文件。包的主要目的是为了更好地组织和管理模块、以便于复用和维护

发布自己的package

创建目录结构

创建一个测试项目文件夹package_demo,在该项目下,创建一个待发布的包目录demo_pk,并在项目文件夹下创建setup.py、LICENSE、README.md,此时,目录结构如下:

README.md

demo package

LICENSE

一半的开源软件会选择相对宽泛的许可证MIT(The MIT License),也就是坐着保留版权,没有其他任何限制
更多许可可以参考:https://choosealicense.com/

MIT License

Copyright (c) [2024] [zhengyu]

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.

setup.py

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="zy_demo1", # 模块名称
    version = "1.0.1", # 当前版本
    author="zhengyu", # 作者
    author_email="543278005@qq.com", # 作者邮箱
    description="simple demo package", # 简短介绍
    long_description=long_description, # 模块详细介绍
    long_description_content_type="text/markdown", # 模块详细介绍格式
    packages=setuptools.find_packages(), # 自动找到项目中导入的模块
    # 模块相关的元数据(更多描述信息)
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    # 依赖模块
    install_requires=[
        'numpy',
        'opencv-python'
    ],
    python_requires=">=3",
    # url="https://github.com/UncoDong", # github地址
)

demo.py

import numpy as np
import cv2

class ImageProcess:
    '''
    图像处理类
    '''
    def __init__(self, img_path, dst_width, dst_height) -> None:
        self.img_path = img_path
        self.dst_width = dst_width
        self.dst_height = dst_height
    
    def preprocess(self):
        '''
        返回处理后的图像以及仿射变换矩阵M
        '''
        img = cv2.imread(self.img_path)
        scale = min((self.dst_width / img.shape[1]), (self.dst_height / img.shape[0]))
        ox = (-scale * img.shape[1] + self.dst_width)  / 2
        oy = (-scale * img.shape[0] + self.dst_height) / 2
        M  = np.array([
            [scale, 0, ox],
            [0, scale, oy]
        ], dtype=np.float32)
        img_pre = cv2.warpAffine(img, M, dsize=[self.dst_width, self.dst_height], flags=cv2.INTER_LINEAR,
                            borderMode=cv2.BORDER_CONSTANT, borderValue=(114,114,114))
        return img_pre, M

发布

  • List item

确保拥有setuptools和wheel

pip install setuptools wheel

在setup.py位于的同一目录运行此命令:

python setup.py sdist bdist_wheel

主要是为了生成这两个玩意
在这里插入图片描述

  • PyPI
    https://pypi.org/注册一个属于你自己的账号

    在这里插入图片描述
    在这里插入图片描述
    接着设置认证
    在这里插入图片描述
    认证后获取API token

  • 安装twine

pip install twine
  • 安装完成之后,运行下面的命令上传包。会让你输入之前获得的API token
twine upload dist/*

在这里插入图片描述
如果有这个类似的报错,应该是名字重复了,把你要发布的package换个名字
在这里插入图片描述

  • 验证
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

发布了你的package后 可以持续的迭代版本。不要随意删除以发布的package

zy-demo被我删除了以后,这个包名被永久占用了,你无法继续更新和使用这个包名了
在这里插入图片描述

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

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

相关文章

【人工智能】探索最强AI工具:实际应用与影响

随着人工智能(AI)技术的迅猛发展,AI工具已经深入到人们日常生活和工作的方方面面。这些工具不仅提高了生产力,还改变了我们解决问题和处理信息的方式。在中文互联网和国际市场中,众多AI工具已成为人们工作、学习、创作…

软考结构化开发 -- (耦合,内聚,设计原则,系统文档,数据字典)

文章目录 一、耦合二、内聚三、设计原则四、系统文档五、数据字典 一、耦合 模块化:将一个待开发的软件分解成若干个小的简单部分–模块模块独立 无直接耦合:指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,…

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件:iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码: Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…

特惠电影票API接口的优势功能以及对接因素?

特惠电影票对接接口通常是指允许第三方开发者或平台通过编程方式接入电影票预订服务的API。这些接口可以提供查询电影场次、座位信息、票价、订票、支付等功能。以下是一些关键点和考虑因素,以及一些提供特惠电影票API接口的平台: 关键功能 电影场次信息…

RK3568 4G模块移远 EM05-CE

首先确保4G模块的天线是否正确安装,这一步会影响到后面测试成功与失败,购买模块时可以咨询厂家 然后就可以进行测试,首先需要关闭所有网络设备,以我的开发板为例子,确保等会使用的是4G模块的功能 ifconfig eth0 down ifconfig eth1 down ifconfig eth2 down 然后查看ifc…

java-day7

练习一:飞机票 需求: ​ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 ​ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来…

【Spring相关技术】spring进阶-自定义请求报文转对象HttpMessageConverter

文章目录 类继承体系核心类与接口说明底层调用链完整示例步骤 1: 创建自定义的HttpMessageConverter步骤 2: 配置Spring MVC使用自定义转换器步骤 3: 使用自定义转换器 相关文献 类继承体系 默认转换器即springmvc默认的转换器, 用的比较多的是以下两种,…

生信技能61 - 获取比对后BAM文件的多项基础统计指标

获取比对后BAM文件的多项基础统计指标 1. 运行实例 采用pysam库解析bam文件,将bam文件路径作为输入参数,统计输出比对的参考基因组大小、ATCGN各碱基数量/比率、GC含量、UR reads数量、平均测序深度、总reads数量等统计指标。 python bam_statistics.py -b sample.sorted.…

【Nestjs】从入门到精通(依赖注入)

NestJS 是一个基于 Node.js 的渐进式框架,构建在 Express 或 Fastify 之上,主要用于构建高效、可扩展的服务器端应用程序。它使用 TypeScript 并借鉴了 Angular 的设计理念,采用了依赖注入(IoC, Inversion of Control)…

动态网站及爬虫技术应用(题目)

/*T26:HTTP响应消息的状态代码为500时表示( ): HTTP响应消息的状态代码为500时表示服务器内部错误(Internal Server Error)。这通常意味着服务器在处理请求时遇到了意外的情况,导致无法完成该请求。这种错误可能是由于…

操作系统Lesson - 5 进程简介及进程编程模型

文章目录 什么是进程同一程序如何并发? Linux进程常用命令proc目录 PCB进程控制块PCB包含的信息两个进程间的关系 进程编程exec() 替换函数子进程的运行过程 什么是进程 进程 程序运行的过程,系统进行资源管理和调度的独立单位。 程序由两部分组成&am…

基础入门-Web应用架构搭建漏洞HTTP数据包

网站搭建 这里给一个网站搭建的视频链接,之前又搞过搭建服务器,这里就不再重做了 https://www.bilibili.com/video/BV16A4y1X7vg/?spm_id_from333.337.search-card.all.click&vd_sourcec2c3c616b3ad1faf44a9f6f30a4dbb03 值得注意的是,…

网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象

基于tcp的套接字 文章目录 基于tcp的套接字一、套接字的工作流程二、基于tcp的套接字通信三、基于udp的套接字通信四、粘包现象 一、套接字的工作流程 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个…

学习底座架构-武汉

1 学习底座架构概述 大脑学习中心-边缘系统 一、当下教育现状 二、什么是学习底座 三、学习底座价值 七、学习底座解决问题的流程 案例:以4R注意力为例 一 注意力问题解决流程 二 注意力问题的危害 三 衡量注意力水平高低的标准 四 注意力问题4大根源 & 2大诱因…

FPGA驱动HDMI 初级篇

简介 本章节主要讲述如何通过FPGA驱动HDMI显示。 本章节框图如下: bd框图中使用了两个IP核,分别是Video Timing controller核AXI4-Stream to video out两个模块,下面先对两个模块做介绍。 Video Timing controller 配置如下: 这里由于没有使用ZYNQ PS端,…

BKD树介绍、区别与联系

简介 BKD树(全称 bushy kd-trees)是一种用于高维数据搜索的数据结构。它结合了K-D树和B树的特点,旨在提高多维空间数据的索引和查询效率。 基本概念 BKD树是一种二叉树结构,类似于K-D树,但其设计更加注重空间利用率…

10.11Python数学基础-多维随机变量及其分布

多维随机变量及其分布 1.二维随机变量及其分布 假设E是随机试验,Ω是样本空间,X、Y是Ω的两个变量;(X,Y)就叫做二维随机变量或二维随机向量。X、Y来自同一个样本空间。 联合分布函数 F ( x , y ) P ( X ≤ x , Y ≤ y ) F(x,y)P(X≤x,Y≤…

SpringBoot+XXL-JOB:高效定时任务管理

前言 在现代应用程序中,定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合,以简化任务调度和管理。 本文将带领你探索如何将这两者集成在一起,实现高效的定时任务管理。无论你是初学者还是有经验的开发者&…

【进阶】面向对象之接口

文章目录 为什么要有接口如何定义和使用一个接口练习 接口里面的成员特点接口和类之间的关系 为什么要有接口 接口:就是一种规则 如何定义和使用一个接口 接口用关键字interface来定义 public interface 接口名{}接口不能实例化接口和类之间是实现关系,通过imple…

集合的基础操作

1.集合中元素没有顺序,且不会重复,输入的数据若有重复则会去重 2.集合的格式为:变量名{##,##,##} 3.集合中元素的添加格式为:变量名.add(添加的元素) 4.集合中元素的取出格式(取出元素后,原集合中该元素没有了&#…