用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读取环境变量的方法和自定义类分享
Nov 22 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python 列表删除所有指定元素的方法
Apr 19 Python
解决DataFrame排序sort的问题
Jun 07 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
Python实现最常见加密方式详解
Jul 13 Python
利用Python检测URL状态
Jul 31 Python
python使用配置文件过程详解
Dec 28 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
python中wheel的用法整理
Jun 15 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
解析PHP无限级分类方法及代码
2013/06/21 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
javascript函数库-集合框架
2007/04/27 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
Django中URL的参数传递的实现
2019/08/04 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
keras和tensorflow使用fit_generator 批次训练操作
2020/07/03 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
职工运动会邀请函
2014/01/19 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
检举信的格式及范文
2014/04/04 职场文书
租房协议书范本
2014/04/09 职场文书
2014司机年终工作总结
2014/12/05 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏