如何发布自己的Python库?

news2024/11/15 19:36:21

Python包发布

      • 1、背景概述
      • 2、操作指南



1、背景概述


为什么我们要发布自己的Python库?如果你想让你的Python代码,通过pip install xxx的方式供所有人下载,那就需要将代码上传到PyPi上,这样才能让所有人使用

那么,如何发布一个Python库呢?本文将通过具体实践为你提供一份简明的指南

首先,发布一个Python库需要做以下准备:

  • 注册一个PyPi账号:https://pypi.org/account/register/
  • 更新pip到最新版本:py -m pip install --upgrade pip
  • 安装编译工具:pip install --upgrade build
  • 安装PyPi上传工具:pip install twine

2、操作指南


2.1、创建项目结构

a、 创建本地目录结构

mypro/
 └── src/
     └── module/
         ├── __init__.py
         └── core.py

以上除了src__init__.py固定外其他都可自定义;目录结构需保持一致

其中__init__.py用于将目录作为包导入,默认可为空;core.py是包中的一个模块,用于提供功能供下载者调用

b、 创建上传所需文件

mypro/
 ├── src/
 │   └── module/
 │       ├── __init__.py
 │       └── core.py
 ├── LICENSE
 ├── README.md
 ├── requirements.txt
 └── setup.py/pyproject.toml      

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.

README.md:包的详细描述

requirements.txt:包的依赖库

setup.py/pyproject.toml:Python项目打包的核心配置文件

  • setup.py的示例如下:
from setuptools import setup, find_packages

with open("README.md", "r", encoding="utf-8") as f:
    long_description = f.read()

# with open('requirements.txt', "r", encoding="utf-8") as f:
#     required = f.read().splitlines()

setup(
    name="cc_package",                               # 包名
    version="0.0.1",                                 # 版本号
    author="cc",                                     # 作者
    author_email="cc@qq.com",                        # 邮箱
    description="package test",                      # 简短描述
    long_description=long_description,               # 详细说明
    long_description_content_type="text/markdown",   # 详细说明使用标记类型
    # url="https://github.com/",                     # 项目主页
    packages=find_packages(where="src"),             # 需要打包的部分
    package_dir={"": "src"},                         # 设置src目录为根目录
    python_requires=">=3.6",                         # 项目支持的Python版本
    # install_requires=required,                     # 项目必须的依赖
    include_package_data=False                       # 是否包含非Python文件(如资源文件)
)

在这里插入图片描述

2.2、编写核心功能

编写包的核心功能,这里以core.py为例:

def hello():
    print("Hello World!")

2.3、编译打包

打开终端命令行,执行(与setup.py/pyproject.toml同级):

python -m build

打包完成后,会生成dist文件和打包文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4、源码上传

执行检查:

twine check dist/*

在这里插入图片描述

检查是否存在问题,若提示存在问题,先解决;若无问题,执行命令上传:

twine upload dist/*

在这里插入图片描述

API Token的获取:

a、 登录PyPi官网,找到账户设置

在这里插入图片描述
b、 找到API Token
在这里插入图片描述

c、 创建API Token

在这里插入图片描述

如下表示上传成功:

在这里插入图片描述
2.5、验证

a、 访问上传成功的地址,是否存在刚才上传的包

在这里插入图片描述

在这里插入图片描述

b、 使用pip install xxx验证是否可安装

注意:如果使用的镜像不是官网,例如国内使用最多的清华镜像,可能需要等5分钟以上才能安装,镜像同步需要时间

在这里插入图片描述



参考文章:
https://www.cnblogs.com/meet/p/18057112
https://zhuanlan.zhihu.com/p/666369946
https://www.zhihu.com/question/585934803/answer/3451136762


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

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

相关文章

模拟Android系统Zygote启动流程

版权声明:本文为梦想全栈程序猿原创文章,转载请附上原文出处链接和本声明 前言: 转眼时间过去了10年了,回顾整个10年的工作历程,做了3年的手机,4年左右的Android指纹相关的工作,3年左右的跟传感…

Java快速入门系列-9(Spring框架与Spring Boot —— 深度探索及实践指南)

第九章:Spring框架与Spring Boot —— 深度探索及实践指南 9.1 Spring框架概述9.2 Spring IoC容器9.3 Spring AOP9.4 Spring MVC9.5 Spring Data JPA/Hibernate9.6 Spring Boot快速入门与核心特性9.7 Spring Boot的自动配置与启动流程详解9.8 创建RESTful服务与数据库交互实践…

数字化仪:为何成为示波器的理想替代品?——PCIe8910M

在现代科技领域,数字化仪逐渐成为示波器的理想替代品。数字化仪具备诸多特点,使其在多个应用场景下表现出色,逐渐取代传统的示波器。本期文章将探讨数字化仪相对于示波器的优势,以及其哪些特点使其成为示波器的理想替代品。 简介…

AI时代的计算核心,你了解多少?

CPU是中央处理单元,那么GPU是什么呢? CPU的作用是计算机的运算核心和控制核心,GPU作用是什么呢? CPU的大小叫着内存大小,那GPU的大小叫什么呢? 下面我们来聊聊GPU 说起GPU,先来看看我们更为…

将Ubuntu18.04默认的python3.6升级到python3.8

1、查看现有的 python3 版本 python3 --version 2、安装 python3.8 sudo apt install python3.8 3、将 python3.6 和 3.8 添加到 update-alternatives sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --insta…

虚拟资源素材会员交易平台网站源码 带完整源码及教程

今天给大家分享一个虚拟资源素材下载站源码系统,这是一款大家非常需要的虚拟资源下载站源码系统,拥有强大的会员功能,可以单独售卖资源,或者开通会员进行打折购买,或者超级VIP免费下载等等,支持按照时间开通…

为什么看到这么多人不推荐C++?

前几天逛知乎的时候,看到一个问题: 看到这个问题我倒是想吐槽几句了。 C一直没找到自己的定位! C语言:我是搞系统编程开发的,操作系统、数据库、编译器、网络协议栈全是我写的。 PHP:我是搞后端业务开发…

不花一分钱,四大方法教你免费申请SSL证书

在数字化时代,数据安全与隐私保护的重要性日益凸显。为了确保在线信息传输的机密性和完整性,数字证书,尤其是SSL/TLS证书扮演着至关重要的角色。为个人及企业用户提供了经济、高效的加密解决方案。随着市场对SSL证书的逐渐重视,免…

Vue3 笔记

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

idea 中运行spring boot 项目报 Command line is too long的解决办法。

Command line is too long 在这里选择edit configures 选择shrten command line , 选择 jar manifest 运行即可。

【Docker】docker原理及使用-1

Docker目录 1️⃣概念2️⃣使用容器的好处2️⃣docker和普通软件启动方式的区别2️⃣docker和传统虚拟机的区别 1️⃣下载安装2️⃣安装步骤 1️⃣必须要掌握的核心概念1️⃣命令2️⃣例子2️⃣练习题目2️⃣进入一下python环境(简洁) 1️⃣解释一下 redis1️⃣docker底层隔离机…

Spring框架中的单例bean是线程安全的吗?

无状态bean: 无状态的Bean的行为不受其内部状态的影响,每次调用都是基于传入的参数进行计算,而不依赖于任何之前的状态。 (例如上面例子:userService是不能修改的,是无状态的bean) 因此: Spring框架中的…

【位运算】Leetcode 丢失的数字

题目解析 268. 丢失的数字 本题的意思就是数组的长度为n,在[0,n]区间中寻找缺失的一个数字 算法讲解 直观思路:排序 Hash,顺序查找缺失的数字 优化:使用异或,首先将[0,n]之间所有数字异或在一起,然后将…

django 模板js文件为什么最后引入

<!-- 引入Bootstrap JS --> <script src"https://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/js/bootstrap.bundle.min.js"></script> 为什么最后引入例子 <!-- templates/inspection_records.html --><!DOCTYPE html> <html lang…

ROS2从入门到精通1-3:详解ROS2动作通信机制与自定义动作

目录 0 专栏介绍1 动作通信模型2 动作模型实现(C)3 动作模型实现(Python)4 自定义动作 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 &#x1f680;详情&a…

【论文阅读——SplitFed: When Federated Learning Meets Split Learning】

级别CCFA 1.摘要 联邦学习&#xff08;FL&#xff09;和分割学习&#xff08;SL&#xff09;是两种流行的分布式机器学习方法。两者都采用了模型对数据的场景&#xff1b;客户端在不共享原始数据的情况下训练和测试机器学习模型。由于机器学习模型的架构在客户端和服务器之间…

vue.config.js跨域问题解决

讲解视频 问题背景 目标地址&#xff1a; 而当前项目启动是http&#xff0c;协议名不同&#xff0c;所以跨域了 解决步骤和解答 1. 新建vue.config.js文件 2. 添加如下代码&#xff1a; 一般目标路径target写 域名 就可以了 但其实&#xff0c;写路径也可以&#xff0c;…

移动应用安全合规动态:网信办、金管局发文强调数据安全;3月个人信息违规抽查结果出炉!(第五期)

一、监管部门动向&#xff1a;国家互联网信息办公室公布《促进和规范数据跨境流动规定》; 工信部发布《关于网络安全保险典型服务方案目录的公示》 二、安全新闻&#xff1a;恶意软件警报&#xff01;黑客利用软件即服务攻击印度安卓用户&#xff1b;Cerberus银行恶意软件的虚…

Linux内核常见的丢包场景有哪些

目录 摘要 1 收发包处理流程 2 硬件网卡相关 2.1 ring buffer满 2.2 利用 ntuple 保证关键业务 3 arp丢包 3.1 neighbor table overflow 3.2 unresolved drops 4 conntrack丢包&#xff1a;nf_conntrack: table full 5 udp接收buffer满 6 丢包定位 6.1 dropwatch 查看丢包 6.2…

ERROR 1052 (23000): Column ‘deptno‘ in field list is ambiguous

错误原因&#xff1a; 这个错误通常是在多表查询中&#xff0c;因为你的SQL查询中包含了多个表&#xff0c;并且这些表中都有一个名为deptno的列。这会导致数据库无法确定你要引用哪个表中的 deptno列&#xff0c;从而产生歧义。 解决方法&#xff1a; 为了解决这个问…