发布你自己的轮子 - PyPI打包上传实践
文章目录
- 发布 Python 包
- 准备
- 创建用户验证文件
- 创建项目结构
- 编写setup.py
- 编写README.md
- 编写LICENSE
- 生成发布包
- 本地测试(可选)
- 上传到PyPI
- 安装测试
- 常见错误
- 参考
作为一门流行的编程语言,Python有着世界上首屈一指的开发者社区,使得大家可以有效地进行共享和协作。正所谓 “ 人生苦短,我用Python”,Python 的一大优势就是有着丰富且易用的第三方模块。无论你做什么,几乎都能找到扩展包达到你的目的。而这一切,都是完全开源免费的!
既然 Python 的核心是第三方扩展包,那么你想不想自己写一个并发布呢?无论是将自己的优秀项目开源出来,还是写一些可以经常复用的小工具,都是一件很棒的事情
发布 Python 包
PyPI(Python Package Index)是一个开源许可的软件包公共存储库,可供所有 Python 用户使用。Python包管理工具 pip
,就是从 PyPI 上下载源码并编译安装的。如果你想要你的包能够通过网络安装,那么 PyPI 是你的不二选择
准备
- 前往 PyPI 官网注册账号并验证邮箱
- 使用 Github 托管项目 (可选)
创建用户验证文件
创建 .pypirc
文件,放置到操作系统 ~ 目录下,在类 linux 系统中就是 ~/
目录,windows 下则是 C:\Users\<用户名>\
,内容如下:
[distutils]
index-servers = pypi[pypi]
username:你的PyPi用户名
password:你的PyPi密码
创建项目结构
zzzzls-project/loler-spider/ # 这个包是我们 Python项目的主体文件__init__.pyheroSpider.pysetup.py # setup.py, LICENSE, README.md 是我们要打包发布的辅助文件LICENSEREADME.md
编写setup.py
这里重点说明一下 setup.py
文件,因为整个 pip项目的发布和上传都是基于这个文件完成的
import setuptoolswith open("README.md", "r", encoding='utf-8') as fh:long_description = fh.read()setuptools.setup(name="loler-spider",version="1.0.1",author="zzzzls",author_email="245129129@qq.com",description="A spider to download lol-hero image",long_description=long_description,long_description_content_type="text/markdown",url="https://github.com/zzzzls/",packages=setuptools.find_packages(),license='MIT',keywords=['lol', 'image', 'spider', 'download'],install_requires=["requests","tqdm"]
)
name
软件包的发行名称。只能由
字母,数字,下划线(_),横杠(-),句点(.)
构成,不区分大小写,需要确保其唯一性,不能和其他软件包重名。version
软件包的版本。后续更新软件包需要修改为更高的版本号
author & author_email
作者信息
description
软件包的简单描述
long_description
软件包的详细描述
long_description_content_type
设置
long_description
的文本类型,可以是text/plain
,text/x-rst
,text/markdown
url
项目主页 URL,这里指向 Github 项目地址
packages
项目包的列表,我们可以使用
find_packages()
来自动发现所有包和子包。在当前项目中,包的列表将是loler-spider
license
项目许可证,见下文描述
keywords
项目的关键字
install_requires
软件包运行需要的其他依赖,用户通过 pip 安装当前软件包时,会自动安装这些依赖
检测 setup.py 文件语法是否正确
python setup.py check
出现
running check
表示正确,可以进行下一步
更多参数简介:https://packaging.python.org/guides/distributing-packages-using-setuptools/
编写README.md
项目首页的说明文档,下为一个基本示例:
# Example PackageThis is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.
建议参考优秀项目的写法, 示例:requests
编写LICENSE
如下列举 5 种最常用的开源协议(BSD
, MIT
, Apache2.0
, GNU GPL
, LGPL
)及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考
当你确定使用的协议后,前往 choosealicense 复制对应的协议内容粘贴至 LICENSE
文件即可
注意: 需要同步修改
setup.py
文件中 license 字段!
生成发布包
python setup.py sdist bdist_wheel
正确执行后的目录结构:
├── build
│ ├── bdist.win-amd64
│ └── lib
│ └── loler_spider
│ ├── __init__.py
│ ├── HeroSpider.py
├── dist
│ ├── loler_spider-1.0.1-py3-none-any.whl
│ └── loler_spider-1.0.1.tar.gz
├── loler_spider
│ ├── __init__.py
│ ├── HeroSpider.py
├── loler_spider.egg-info
│ ├── dependency_links.txt
│ ├── PKG-INFO
│ ├── requires.txt
│ ├── SOURCES.txt
│ └── top_level.txt
├── LICENSE
├── README.md
└── setup.py
本地测试(可选)
建议在将包上传到 PyPI 之前先在本地完成测试工作,方法是先进入 dist 文件夹, 然后使用 pip 命令安装本地的二进制包,安装完成后测试其中的方法是否可用
cd dist
pip install loler_spider-1.0.1.tar.gz
上传到PyPI
安装发布需要的工具
twine
pip install twine
开始上传
twine upload dist/*
出现如下结果即为上传成功
访问上图中的 URL 即可到达项目 PyPI主页
安装测试
pip install loler-spider
国内源收录需要一段时间,若安装失败建议使用官方源进行安装测试
pip install loler-spider -i https://pypi.python.org/simple
常见错误
Upload failed (403): Invalid or non-existent authentication information
错误的用户验证信息,你需要创建一个用户校验文件
~/.pypirc
,请参阅上文Server response (401): Incomplete registration; check your email
你的 PyPI 账户还没有完成邮箱验证
error: Upload failed (499): Client Disconnected
网络问题,多重试几次
Upload failed (400): File already exists
文件已经存在了,每一次上传都应该更新版本号
参考
打包 Python 项目
PyPI打包上传实践
Python-OpenSource-Project-Developer-Guide
发布你自己的轮子 - PyPI打包上传实践相关推荐
- python模块打包上传pypi
python模块打包上传pypi pypi注册 先在pypi.org上注册账户密码,务必牢记 包 模块尽量都保存在包中,如果要进行模块的定义,首先定义的就是包, 所以每个目录下需要一个__init__ ...
- python打包上传至pypi —— 具有多个目录的项目工程快速打包上传
项目目录 项目目录说明: cqrcode:项目包(我的里面有多个目录) LINCENSE:许可证 MANIFEST.in:需要打包的项目文件说明 README.md:项目说明文档 requiremen ...
- python模块打包上传pypi-演示pytest hook函数二次开发
python模块打包上传pypi pytest hook函数二次开发 修改默认编码 显示中文用例名称 官方文档 : https://packaging.python.org/en/latest/tut ...
- Nuget多项目批量打包上传服务器的简明教程
本篇不会介绍Nuget是什么,如何打包上传Nuget包,怎么搭建私有Nuget服务器.这些问题园子里都有相应的文章分享,这里不做过多阐述.另外本文假设你已经下载了Nuget.exe,并且已经设置好了环 ...
- Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传 构建自动化步骤为: 1. Xcode 有Xcode 内部提供的打包命令来打包完成代 ...
- iOS APP打包上传到APPstore的最新步骤
一.前言: 作为一名iOS开发者,把辛辛苦苦开发出来的App上传到App Store是件必要的事.但是很多人还是不知道该怎么上传到App Store上 下面就来详细讲解一下具体流程步骤. 二.准备: ...
- uni-app实现支付及项目打包上传
本文主要介绍uni-app项目中如何实现支付功能(支付宝支付.微信支付),及项目如何打包上传. 一.实现支付 前置工作,项目要实现支付功能,首先要在根目录manifest.json文件内App模块配置 ...
- Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
使用IDEA打包上传到Nexus3私服 一.Nexus是什么 二.使用Nexus3搭建maven私服 三.IDEA打包上传到Nexus3私服 1.配置 .m2 下的 settings.xml 1.配置 ...
- iOS 打包上传蒲公英和AppStore出问题
Failed to locate or generate matching signing assets Xcode attempted to locate or generate matching ...
最新文章
- 【转载】老鸟程序员总结的这些小技巧
- 如何最大化利用CPU性能创作沉浸式VR体验
- java中的抽象类和抽象方法
- regexpal 正则表达式实时调试工具
- 2.4-虚拟磁盘恢复虚拟机
- 【Nutch2.2.1源代码分析之4】Nutch加载配置文件的方法
- mysql008where.or.in查询
- .NET LINQ分析AWS ELB日志避免996
- 当年赫赫有名的“四大工学院”,如今都发展得怎样?依然牛气冲天
- Scala初体验之:Map
- Spring Boot 使用 Log4j2
- Java中对象的串行化(Serialization)和transient关键字
- python concurrent.futures包使用,捕获异常
- steam加速_Steam玩家试用追梦加速器后,怎么说?
- 修复40G的老IDE硬盘
- 模块化的机器学习系统就够了吗?Bengio师生告诉你答案
- java地铁线路规划_地铁路线规划系统
- Anaconda安装过程中遇到的诡异事件
- 【Bootstrap】选择折叠项collapse
- 爬虫python淘宝_python爬虫爬取淘宝失败原因分析