用Python将库打包发布到pypi


Posted in Python onApril 13, 2021

如果需要将自己写好的python打包,并发布到pypi,这样其他人就可以直接通过pip install来安装对应的包,可以参考如下教程

1. 注册pypi账号并创建token

首先访问https://pypi.org/ 并注册账号
然后跳转到账号设置

用Python将库打包发布到pypi

然后选择API token->Add API token

用Python将库打包发布到pypi

输入token name并在Scope中选择Entire account(第一次需要选择Entire account)

用Python将库打包发布到pypi

然后在本地,修改.pypirc文件
输入的内容为:

[pypi]
username = __token__
password = {token}

只需要修改{token}为自己的token即可

2. 编写setup.py和setup.cfg

setup.cfg的内容为

[metadata]
license_files = LICENSE.txt

LICENSE.txt是license文件,需要自行编写
setup.py在根目录下,一个示例为

from setuptools import setup
import compileall
from os import path
# 读取readme文件,这样可以直接显示在主页上
this_directory = path.abspath(path.dirname(__file__))
with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
    long_description = f.read()

compileall.compile_dir("src")

setup(
    name='my-python',
    version='1.0.2',
    packages=['src',
              'src.main',
              'src.main.config'],
    url='https://github.com/hTangle',
    license='Apache 2.0',
    author='hTangle',
    author_email='',
    description='',
    keywords='',
    python_requires='>=3.4, <4',
    long_description=long_description,
    long_description_content_type='text/markdown',
    install_requires=['requests']
)

具体的字段含义如下:

name: 包名

version: 版本号,支持如下形式

1.2.0.dev1  # Development release
1.2.0a1     # Alpha Release
1.2.0b1     # Beta Release
1.2.0rc1    # Release Candidate
1.2.0       # Final Release
1.2.0.post1 # Post Release
15.10       # Date based release
23          # Serial release

description: 包描述,会放在如下图所示的位置处

用Python将库打包发布到pypi

url: 包的链接,可以使用github链接,pypi会自动获取到仓库的信息,示例如下:


用Python将库打包发布到pypi

author: 作者

license: 许可证

classifiers: 分类,示例如下:

classifiers=[
    # How mature is this project? Common values are
    #   3 - Alpha
    #   4 - Beta
    #   5 - Production/Stable
    'Development Status :: 3 - Alpha',

    # Indicate who your project is intended for
    'Intended Audience :: Developers',
    'Topic :: Software Development :: Build Tools',

    # Pick your license as you wish (should match "license" above)
    'License :: OSI Approved :: MIT License',

    # Specify the Python versions you support here. In particular, ensure
    # that you indicate whether you support Python 2, Python 3 or both.
    'Programming Language :: Python :: 2',
    'Programming Language :: Python :: 2.7',
    'Programming Language :: Python :: 3',
    'Programming Language :: Python :: 3.6',
    'Programming Language :: Python :: 3.7',
    'Programming Language :: Python :: 3.8',
    'Programming Language :: Python :: 3.9',
],

keywords: 关键字,和论文的关键字类似

project_urls: 一些项目的其他链接,示例如下

project_urls={
    'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
    'Funding': 'https://donate.pypi.org',
    'Say Thanks!': 'http://saythanks.io/to/example',
    'Source': 'https://github.com/pypa/sampleproject/',
    'Tracker': 'https://github.com/pypa/sampleproject/issues',
},

packages: 需要打包的目录,需要以根目录为起点,可以使用

find_packages自动查找包,注意不要漏写

install_requires: 包依赖的其他包

python_requires: python的版本需求

package_data: 需要的额外的文件,例如包强依赖一个本地文件,可以使用如下

package_data={
    'sample': ['package_data.dat'],
},

3. 打包

打包命令为

python setup.py cmd

cmd可以取值为

bdist_wheel : create a wheel distribution

bdist_egg : create an “egg” distribution

sdist : create a source distribution (tarball, zip file, etc.)

bdist : create a built (binary) distribution

bdist_dumb : create a “dumb” built distribution

bdist_rpm : create an RPM distribution

bdist_wininst : create an executable installer for MS Windows

打包为tar.gz

python setup.py sdist

打包好的文件再dist目录下

4. 上传

可以首先使用twine对包进行检查

twine check dist/*

输出如下

用Python将库打包发布到pypi

再运行上传命令

twine upload dist/*

到此这篇关于用Python将库打包发布到pypi的文章就介绍到这了,更多相关python打包到pypi内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python函数式编程指南(三):迭代器详解
Jun 24 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
使用python计算三角形的斜边例子
Apr 15 Python
jupyter notebook的安装与使用详解
May 18 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
python如何停止递归
Sep 09 Python
python 动态绘制爱心的示例
Sep 27 Python
pip install命令安装扩展库整理
Mar 02 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
js获取div高度的代码
2008/08/09 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
Python3爬楼梯算法示例
2019/03/04 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
会话Bean的种类
2013/11/07 面试题
优秀食品类广告词
2014/03/19 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
2014年库房工作总结
2014/11/26 职场文书
学雷锋倡议书
2015/01/19 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
Java 数组的使用
2022/05/11 Java/Android