用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爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python变量和字符串详解
Apr 29 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python多继承顺序实例分析
May 26 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
python3.6+selenium实现操作Frame中的页面元素
Jul 16 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
Python实现AI换脸功能
Apr 10 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
python实现视频压缩功能
Dec 18 Python
利用python进行数据加载
Jun 20 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
PHP实现重载的常用方法实例详解
2017/10/18 PHP
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python去除字符串两端空格的方法
2015/05/21 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python实现复制大量文件功能
2019/08/31 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
介绍一下代理模式(Proxy)
2014/10/17 面试题
建筑学推荐信
2013/11/03 职场文书
信息管理员岗位职责
2013/12/01 职场文书
创意活动策划书
2014/01/15 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
水毁工程实施方案
2014/04/01 职场文书
个人借款担保书
2014/04/02 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
离婚协议书范文2015
2015/01/26 职场文书
物业保安辞职信
2015/05/12 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL