发布自己的Python包(Pypi)

发布自己的Python包(Pypi)

我们经常使用 Pypi 来安装包,但是有时候我们也想要发布自己的 Pypi 包,有可能我们写了一个特别牛的包,也有可能我们只是想使用自己常用的一些轮子,可能这是我们日常编码中很常用的一些轮子,我们在不同工程目录、不同设备上都会频繁使用的一些接口,可能我们自己对这些自己常用的接口很熟悉,但是却因为环境的迁移而需要重复地实现,这时我们就可以发布一个自己的 Pypi 包,在环境迁移时使用熟悉的轮子只需要 pip install *** 即可。

就算这些轮子我们可能实现的没有那么完美,”不足为外人道也“,但却是我们最熟悉的,接口早已了然于心,因此这样使用起来会很方便。

发布

注册Pypi账号

没什么好多说的,出奇的简单,不需要任何多余的东西,邮箱、用户名、密码即可。链接如下:

https://pypi.org/

开发自己的包

假设我想发布一个包,里面有我们常用的一些使用函数,包名称为 SongUtils,我们先完成功能的开发,都在 SongUtils 目录下,得到目录结构如下:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py

__init__ 文件是必须的,这是一个package的象征,可以什么都不写,但必须有。

准备setup.py

setup.py 是构建我们的Python包的关键,它的位置与我们的整个工程目录同级,包含了我们这个包的一些关键信息和依赖等,简单的可以参考下面笔者第一次发布包时的 setup.py 文件内容,其中各项看其名称即可一目了然,更详细的各项参数的含义网上其他博客也有介绍,在此不再赘述:

#!/usr/bin/env python
#-*- coding:utf-8 -*-from setuptools import setup, find_packages            #这个包没有的可以pip一下setup(name = "SongUtils",      #这里是pip项目发布的名称version = "0.0.1",  #版本号,数值大的会优先被pipkeywords = ["pip", "SongUtils"],			# 关键字description = "Junjie's private utils.",	# 描述long_description = "Junjie's private utils.",license = "MIT Licence",		# 许可证url = "https://github.com/Adenialzz/SongUtils",     #项目相关文件地址,一般是github项目地址即可author = "Adenialzz",			# 作者author_email = "********@***.com",packages = find_packages(),include_package_data = True,platforms = "any",install_requires = ["numpy", "pillow"]          #这个项目依赖的第三方库
)

本地打包

完成 setup.py 文件后,我们的目录树如下:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py
└── setup.py

然后在 setup.py 所在目录下,我们运行它来将项目本地打包:

python setup.py sdist  

没有问题的话,在打包之后我们会得到如下目录树:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py
├── SongUtils.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── requires.txt
│   └── top_level.txt
├── dist
│   └── SongUtils-0.0.1.tar.gz
└── setup.py

上传到Pypi服务器

首先在setup.py这一级的目录下建立一个系统文件 .pypirc 内容如下:

[distutils]
index-servers = pypi[pypi]
username:你的PyPi用户名
password:你的PyPi密码

这里的用户名密码,就是我们第一步注册时的账号。

然后安装一个上传的工具来上传即可:

pip install twine
twine upload dist/SongUtils-0.0.1.tar.gz

验证

至此我们整个Python包的发布过程就已经完成了,我们可以(在其他机器)安装来验证一下:

pip install SongUtils

然后准备一个测试文件:

# test.py
import SongUtils# Call you functions to evaluate.

在测试文件中调用自己包中的函数,看测试是否正常工作:

python test.py

删除

如果你想删除自己的 Pypi 包,只需要登陆到自己的 Pypi 网站的账户,并进入到自己想要删除的项目,然后选择对应版本,点击 Optins -> Delete 即可,过程中会要求你输入删除的版本号来防止误删除,在删除后也会给你的邮箱发送邮件提醒。

但是,这不是一个好主意,因为前一个软件包的所有用户都会看到他们的安装失败。

如果要弃用程序包,可以执行的操作是使用指向新程序包的README发布最后一个发行版。有人为python-cli-ui做了那个,它被替换为cli-ui

你也可以:

  • setup.py运行时添加警告
  • 或在导入时
  • 或者用一个取决于新名称的虚拟包替换包。

说明

这个过程只是一个简单的 Python 包的发布过程,在过程中其实有许多需要注意的地方,比如 setup.py 文件应当写的更加规范,整个包内的代码也应当更加规范,应当有一个比较好的 Description 或者 README.md 文档等等。这就留在以后有机会再说吧。

扩展阅读:

python打包发布pypi踩坑记(最新贴心版本,认真对待自己的库)

Ref:

https://www.cnblogs.com/suoyike1001/p/15216699.html

https://cloud.tencent.com/developer/ask/208868

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

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

相关文章

Ubuntu PPA 使用指南

Ubuntu PPA 使用指南 转自:https://zhuanlan.zhihu.com/p/55250294 一篇涵盖了在 Ubuntu 和其他 Linux 发行版中使用 PPA 的几乎所有问题的深入的文章。 如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 发行版,例如 Linux Mint、Linux Lite、Zorin…

如何在 Linux 中快速地通过 HTTP 提供文件访问服务

如何在 Linux 中快速地通过 HTTP 提供文件访问服务 转自:https://linux.cn/article-10205-1.html 如今,我有很多方法来通过 Web 浏览器为局域网中的其他系统提供单个文件或整个目录的访问。我在我的 Ubuntu 测试机上测试了这些方法,它们如下面…

Linux apt命令

Linux apt命令及其与apt-get的关系 转自:https://blog.csdn.net/taotongning/article/details/82320472、https://www.runoob.com/linux/linux-comm-apt.html apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管…

杨宏宇:腾讯多模态内容理解技术及应用

杨宏宇:腾讯多模态内容理解技术及应用 分享嘉宾:杨宇鸿 腾讯 内容理解高级工程师 编辑整理:吴祺尧 出品平台:DataFunTalk 导读: 搜索内容的理解贯穿了整个搜索系统。我们需要从多个粒度理解搜索内容,包括语…

git登录相关操作梳理

git登录相关操作梳理 本文主要基于 Linux/Mac ,Windows下未经测试,不过估计差不多,在 git bash 内操作即可。 创建ssh key并关联github等账号 因为本地Git仓库和GitHub仓库之间的传输是通过SSH加密传输的,GitHub需要识别是否是…

关于mmdetection上手的几点说明

关于mmdetection上手的几点说明 官方的文档很有参考价值,并且也有中文版,应当是大家上手 mmdetection 的第一参考,本文是记录一些笔者在小白阶段上手 mmdetection 时的一些心得,这些东西没有人提,可能是大佬们觉得这些…

docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

Docker容器中使用Nvidia GPU报错 docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]]. 问题出现 我们知道,想要在 docker19 及之后的版本中使用 nvidia gpu 已经不需要单独安装 nvidia-docker 了,这…

CUDA环境详解

CUDA环境详解 本文主要介绍 CUDA 环境,这一堆东西网上有很多博客介绍过了,我再来一篇:),参考前辈们的文章,看能不能写的更清楚一点。读后仍有问题,欢迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行计算架构&…

共享内存简介及docker容器的shm设置与修改

共享内存简介及docker容器的shm设置与修改 共享内存简介 共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存&#xff…

对Docker镜像layer的理解

对Docker镜像layer的理解 转自:https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一个Dockerfile的例子,每一行都会生成一个新的l…

ssh免密登录配置方法及配置

ssh免密登录配置方法及配置 直接上步骤,记我们本机为机器A,而机器B、机器C等是我们的服务器,我们要配置的是A到B、C等的 ssh 免密登录。 1 在机器A上生成秘钥对 ssh-keygen会得到输出: Generating public/private rsa key pai…

机器学习系统:设计与实现 计算图

机器学习系统:设计与实现 计算图 转自:https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章节中,我们展示了用户利用机器学习框架所编写的程序。这些用户程序包含了对于训练数据,模型和训练过程的定义。然而为了…

常见浮点数格式梳理

常见浮点数格式梳理 IEEE 754 标准 浮点数转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二进制浮点数算术标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值&am…

Python拾遗1:collections、itertools和内存io

Python拾遗1:collections、itertools和内存io 转自:https://www.liaoxuefeng.com/wiki/1016959663602400 本系列旨在补充python中一些很好用但是并非常规课程主线中的知识。 collections collections是Python内建的一个集合模块,提供了许…

混合精度训练

混合精度训练 转自:https://zhuanlan.zhihu.com/p/441591808 通常我们训练神经网络模型的时候默认使用的数据类型为单精度FP32。近年来,为了加快训练时间、减少网络训练时候所占用的内存,并且保存训练出来的模型精度持平的条件下&#xff0…

拓扑排序C++

拓扑排序C 几个基本概念的介绍 入度和出度 图中的度:所谓顶点的度(degree),就是指和该顶点相关联的边数。在有向图中,度又分为入度和出度。 入度 (in-degree) :以某顶点为弧头,终止于该顶点的边的数目称为该顶点的…

C++面试常考题——编译内存相关

C面试常考题——编译内存相关 转自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/ C程序编译过程 编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。 编译预处…

C++遍历删除元素

C遍历删除元素 转自:http://zencoder.info/2019/10/11/erase-element-from-container/ 今天看到一个patch fix从std::map中遍历删除元素导致crash问题,突然意识到自己对如何正确地从map等C容器中删除元素也没有很牢固清醒的认知。重新梳理了下这块的正…

关键字库函数

关键字库函数 转自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/ sizeof和strlen的区别 strlen 是头文件<cstring> 中的函数&#xff0c;sizeof 是 C 中的运算符。 strlen 测量的是字符串的实际长度&#xff08;其源代码如下&…

memcpy和memmove的区别以及内存重叠问题

memcpy和memmove的区别以及内存重叠问题 转自&#xff1a;https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数&#xff0c;在头文件 string.h 中&#xff0c;作用是拷贝一定长度的内存的内容&#xff0c;原型分别如下&#xff1a; void…