用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使用calendar输出指定年份全年日历的方法
Apr 04 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
Python出现segfault错误解决方法
Apr 16 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Django 视图层(view)的使用
Nov 09 Python
对python多线程与global变量详解
Nov 09 Python
python进行文件对比的方法
Dec 24 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Python Socket多线程并发原理及实现
Dec 11 Python
python中random模块详解
Mar 01 Python
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
python自动化调用百度api解决验证码
利用Python网络爬虫爬取各大音乐评论的代码
用Python制作灯光秀短视频的思路详解
python实现socket简单通信的示例代码
You might like
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP 远程关机实现代码
2009/11/10 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
js 小贴士一星期合集
2010/04/07 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
PHP PDO操作总结
2014/11/17 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
企业厂务公开实施方案
2014/03/26 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
关于感恩的作文
2019/08/26 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
java如何实现socket连接方法封装
2021/09/25 Java/Android