python 如何上传包到pypi


Posted in Python onDecember 24, 2020

有过一定的 Python 经验的开发者都知道,当引入第三方包时,我们常常会使用 pip install 命令来下载并导入包。

那么,如何写一个自己的包,上传到 PyPI 呢,其他开发者也可以通过 pip install 命令下载并导入?

本文提供了最简单的示例。

准备好项目目录

创建一个项目目录,其目录结构如下:

/packaging_tutorial
 /example_pkg
  __init__.py

其中,packaging_tutorial 是一个文件目录,example_pkg 是一个你希望上传的 Python 包。

注:本人使用的是 virtualenv + virtualenvwrapper 构建的 Python 虚拟环境,因此 python 和 pip 命令(而非 python3 和 pip3)直接对应的是我所指定的虚拟环境(Python 3.6.7)。

创建一些必要文件

再向 packaging_tutorial 中创建一些文件。其目录结构如下:

/packaging_tutorial
 /example_pkg
  __init__.py
 setup.py
 LICENSE
 README.md

创建 README.md 文件

在 README.md 可以输入一些介绍项目的文档。

# 测试

这只是一个测试。

- 测试 1
- 测试 2
- 测试 3

创建 setup.py 文件

setup.py 是 setuptools 的构建脚本,它提供了包的各种信息。

在 setup.py 中输入以下代码:

import setuptools

with open("README.md", "r") as fh:
  long_description = fh.read()

setuptools.setup(
  name="example-pkg-your-username",
  version="0.0.1",
  author="Example Author",
  author_email="author@example.com",
  description="A small example package",
  long_description=long_description,
  long_description_content_type="text/markdown",
  url="https://github.com/pypa/sampleproject",
  packages=setuptools.find_packages(),
  classifiers=[
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
  ],
)

各个配置的字段的含义应该是不言而喻的,如果想了解更多,参见官网解释。

创建 LICENSE

LICENSE 是项目所遵循的许可证,以 MIT 为例:

Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

存档发布版本

一般来说,pip 默认应该都安装了 setuptools 和 wheel。如果没有安装,则安装之:

pip install setuptools wheel -i https://pypi.douban.com/simple

如果安装需要更新,则更新之:

pip install --upgrade setuptools wheel -i https://pypi.douban.com/simple

安装好最新版本后,在 setup.py 所在目录下输入:

python setup.py sdist bdist_wheel

这个命令会在生成一个 dist 目录,里面有两个文件:

dist/
 example_pkg_your_username-0.0.1-py3-none-any.whl
 example_pkg_your_username-0.0.1.tar.gz

tar.gz 是源文件存档,whl 是构建的发布版本。

上传发布版本

安装 twine:

pip install twine -i https://pypi.douban.com/simple

安装好之后,执行 twine 命令(这里,需要注意你已经注册了 PyPI 的账号):

twine upload dist/*
Enter your username: heyulong 
Enter your password: 
Uploading distributions to https://upload.pypi.org/legacy/
Uploading example_pkg_heyulong-0.0.1-py3-none-any.whl
100%|??????????????????????????????????????| 5.49k/5.49k [00:01<00:00, 4.66kB/s]
Uploading example-pkg-heyulong-0.0.1.tar.gz
100%|??????????????????????????????????????| 4.23k/4.23k [00:01<00:00, 2.21kB/s]

执行完之后,即可在 PyPI 官网上看到自己上传的项目了。

安装你上传的 PyPI 项目,比如我的:

pip install example-pkg-heyulong

这里简单介绍了上传 PyPI 项目的过程。更多细节请关注 PyPI 官网。

以上就是python 如何上传包到pypi的详细内容,更多关于python 上传包到pypi的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python通过正则表达式选取callback的方法
Jul 18 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Python字符串拼接的几种方法整理
Aug 02 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
用python编写第一个IDA插件的实例
May 29 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python构建基础的爬虫教学
Dec 23 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
Python实现手绘图效果实例分享
Jul 22 Python
Python绘制数码晶体管日期
Feb 19 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 #Python
python xlsxwriter模块的使用
Dec 24 #Python
想学画画?python满足你!
Dec 24 #Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 #Python
用python获取txt文件中关键字的数量
Dec 24 #Python
举例讲解Python装饰器
Dec 24 #Python
python 基于opencv操作摄像头
Dec 24 #Python
You might like
在PHP中使用模板的方法
2008/05/24 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
javascript关于继承解析
2016/05/10 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
vue内置指令详解
2018/04/03 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python实现换位加密算法的示例
2018/10/14 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
python科学计算之narray对象用法
2019/11/25 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
个人自我剖析材料
2014/02/07 职场文书
大四毕业生自荐书
2014/07/05 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Oracle笔记
2021/04/05 Oracle
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL