用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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
Windows下PyCharm安装图文教程
Aug 27 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
pytorch之添加BN的实现
Jan 06 Python
Python如何脚本过滤文件中的注释
May 27 Python
使用K.function()调试keras操作
Jun 17 Python
Python 串口通信的实现
Sep 29 Python
Python json解析库jsonpath原理及使用示例
Nov 25 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
深入apache host的配置详解
2013/06/09 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python实现逻辑回归的方法示例
2017/05/02 Python
python程序控制NAO机器人行走
2019/04/29 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
python如何对链表操作
2020/10/10 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
英语专业毕业生自荐信范文
2013/12/31 职场文书
财务会计专业求职信范文
2013/12/31 职场文书
养成教育经验材料
2014/05/26 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
出差报告格式模板
2014/11/06 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
高质量“欢迎词”
2019/04/03 职场文书
Android Studio 计算器开发
2022/05/20 Java/Android