发布自己的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",  #版本号,数值大的会优先被pip
    keywords = ["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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值