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 del()函数用法
Mar 24 Python
Python Property属性的2种用法
Jun 21 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
matplotlib设置legend图例代码示例
Dec 19 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
创建Django项目图文实例详解
Jun 06 Python
python之信息加密题目详解
Jun 26 Python
在Python 的线程中运行协程的方法
Feb 24 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
Python如何用re模块实现简易tokenizer
May 02 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
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
详解Python3中的 input() 函数
2020/03/18 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
中科软笔试题和面试题
2014/10/07 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
大学生村官演讲稿
2014/04/25 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
学位证书委托书
2014/09/30 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书