用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利用datetime模块计算时间差
Aug 04 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
pytorch 自定义参数不更新方式
Jan 06 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 Python
聊一聊python常用的编程模块
May 14 Python
关于python类SortedList详解
Sep 04 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
php,不用COM,生成excel文件
2006/10/09 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
详解python编译器和解释器的区别
2019/06/24 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
华为慧通笔试题
2016/04/22 面试题
淘宝中秋节活动方案
2014/01/31 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
思品教学工作总结
2015/08/10 职场文书
队名及霸气口号大全
2015/12/25 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书