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+Django在windows下的开发环境配置图解
Nov 11 Python
学习python的几条建议分享
Feb 10 Python
详解Python3中yield生成器的用法
Aug 20 Python
python如何统计序列中元素
Jul 31 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
Django 数据库同步操作技巧详解
Jul 19 Python
Django接收自定义http header过程详解
Aug 23 Python
python文件读写代码实例
Oct 21 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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模板技术[转]
2007/01/04 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
php检测url是否存在的方法
2015/04/14 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
php实现映射操作实例详解
2019/10/02 PHP
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Python生成数字图片代码分享
2017/10/31 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
python中栈的原理及实现方法示例
2019/11/27 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
Python sublime安装及配置过程详解
2020/06/29 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
京剧自荐信
2014/01/26 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
求职信模板
2014/05/23 职场文书
地震捐款倡议书
2014/08/29 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
深入浅析Django MTV模式
2021/09/04 Python
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫