用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 matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python numpy元素的区间查找方法
Nov 14 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Python3实现建造者模式的示例代码
Jun 28 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
phpwind中的数据库操作类
2007/01/02 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP对象相关知识总结
2017/04/09 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
jupyter安装小结
2016/03/13 Python
python程序封装为win32服务的方法
2021/03/07 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
舞蹈教育学专业自荐信
2014/06/15 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
安全员岗位职责
2015/02/10 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书