用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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
整理Python 常用string函数(收藏)
May 30 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
Python正则表达式经典入门教程
May 22 Python
详解python中executemany和序列的使用方法
Aug 12 Python
TensorFlow变量管理详解
Mar 10 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
php 文章调用类代码
2011/08/11 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
超全面的javascript中变量命名规则
2017/02/09 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
让python在hadoop上跑起来
2016/01/27 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
django解决跨域请求的问题
2018/11/11 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
2019/01/03 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python实现倒计时小工具
2019/07/29 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
大学生自我鉴定
2013/12/08 职场文书
大四自我鉴定
2014/02/08 职场文书
财务部绩效考核方案
2014/05/04 职场文书
销售竞赛活动方案
2014/08/23 职场文书