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之有容乃大的list(2)
Sep 15 Python
Python fileinput模块使用介绍
Nov 30 Python
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
python单例模式实例解析
Aug 28 Python
python实现简单的文字识别
Nov 27 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
Python self用法详解
Nov 28 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php通过各种函数判断0和空
2020/07/04 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python实现登录接口的示例代码
2017/07/21 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
用Python逐行分析文件方法
2019/01/28 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
幼儿园校车司机的岗位职责
2014/01/30 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang