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 SQLite3数据库操作类分享
Jun 10 Python
Python 不同对象比较大小示例探讨
Aug 21 Python
深入讲解Python编程中的字符串
Oct 14 Python
python将ansible配置转为json格式实例代码
May 15 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
实例讲解python中的序列化知识点
Oct 08 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
python tkinter控件布局项目实例
Nov 04 Python
Django 自动生成api接口文档教程
Nov 19 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 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
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
python实现在windows下操作word的方法
2015/04/28 Python
python实现文本文件合并
2015/12/29 Python
Python实现包含min函数的栈
2016/04/29 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python中new方法的详解
2019/01/15 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python list转置和前后反转的例子
2019/08/26 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
小松树教学反思
2014/02/11 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
承诺书范本
2015/01/21 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书