当前位置: 首页 > article >正文

(1)发布自己的python包

文章目录

    • 概要
    • 模块和包
    • 发布自己的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.kler.cn/a/348827.html

相关文章:

  • 如何在PHP中强制转换类型?
  • 熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求
  • Spring Cloud Alibaba 技术栈与概要说明
  • COD深度学习模型设计中,可以将各个模块归为这四大类。
  • VMware设置虚拟机与物理机在同一网段
  • 链表Set_LinkList(建立)
  • UE5 圆周运动、贝塞尔曲线运动、贝塞尔曲线点
  • 查看系统服务
  • SpringBoot驱动的飘香水果购物网站:设计与实现
  • 单片机原理与技术
  • SpringBoot驱动的智能健康推荐系统
  • HTML 技巧
  • 线上问题复盘模板
  • 物联网年度“盛宴”!华普微受邀参加Silicon Labs Works With大会
  • OpenReview API | 高效检索会议论文
  • 快速理解http的get和post
  • 百果园利润暴跌收入下滑:加盟店减少88家,销售费用却大幅增长
  • MySQL事务、存储引擎
  • wifi配置文件在linux哪个目录上
  • leetcode栈与队列(一)-有效的括号