用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的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
深入理解Python3中的http.client模块
Mar 29 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
python中partial()基础用法说明
Dec 30 Python
python3.5安装python3-tk详解
Apr 26 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python对execl 处理操作代码
Jun 22 Python
python 安装移动复制第三方库操作
Jul 13 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
PHP URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
Chrome Web App开发小结
2014/09/04 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
vant实现购物车功能
2020/06/29 Javascript
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Django后台admin的使用详解
2019/07/08 Python
Python数据存储之 h5py详解
2019/12/26 Python
Python有参函数使用代码实例
2020/01/06 Python
Python类的动态绑定实现原理
2020/03/21 Python
Python内置异常类型全面汇总
2020/05/28 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
酒店个人培训自我鉴定
2013/12/11 职场文书
超市中秋节活动方案
2014/02/12 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2015年体检中心工作总结
2015/05/27 职场文书