用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 相关文章推荐
wxPython学习之主框架实例
Sep 28 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
python将一组数分成每3个一组的实例
Nov 14 Python
python之pexpect实现自动交互的例子
Jul 25 Python
Python queue队列原理与应用案例分析
Sep 27 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
python自定义函数def的应用详解
Jun 03 Python
解决python运行效率不高的问题
Jul 20 Python
Python面向对象实现方法总结
Aug 12 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
python FTP编程基础入门
Feb 27 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
php删除数组元素示例分享
2014/02/17 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
php安装swoole扩展的方法
2015/03/19 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
诚信贷款承诺书
2014/05/30 职场文书
运动会加油稿20字
2014/11/15 职场文书
公司股份合作协议书
2014/12/07 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
分享3个非常实用的 Python 模块
2022/03/03 Python