用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中实现参数类型检查的简单方法
Apr 21 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python如何发布自已pip项目的方法步骤
Oct 09 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
pytorch中的自定义数据处理详解
Jan 06 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python 轮询执行某函数的2种方式
May 03 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
python3 kubernetes api的使用示例
Jan 12 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
php实现ping
2006/10/09 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
javascript数据类型详解
2017/02/07 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
金士达面试非笔试
2012/03/14 面试题
少先队学雷锋活动总结范文
2014/03/09 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
寒假家长评语大全
2014/04/16 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android