用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 import自定义模块方法
Feb 12 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python查找第n个子串的技巧分享
Jun 27 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
python中字符串内置函数的用法总结
Sep 13 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
python用post访问restful服务接口的方法
Dec 07 Python
python实现简单加密解密机制
Mar 19 Python
python编写猜数字小游戏
Oct 06 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
用python修改excel表某一列内容的操作方法
Jun 11 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python数据结构之单链表详解
2017/09/12 Python
Python subprocess模块详细解读
2018/01/29 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python中的枚举类型示例介绍
2019/01/09 Python
python解析含有重复key的json方法
2019/01/22 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
通信工程专业女生个人求职信
2013/09/21 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
考核工作实施方案
2014/03/30 职场文书
新春寄语大全
2014/04/09 职场文书
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server