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函数可变参数定义及其参数传递方式实例详解
May 25 Python
Django查询数据库的性能优化示例代码
Sep 24 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
Django如何将URL映射到视图
Jul 29 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python接口测试数据库封装实现原理
May 09 Python
基于python实现音乐播放器代码实例
Jul 01 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 microtime获取浮点的时间戳
2010/02/21 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
php中的依赖注入实例详解
2019/08/14 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
js读取配置文件自写
2014/02/11 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
2020/07/24 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
python实现2048小游戏
2015/03/30 Python
基于Python的关键字监控及告警
2017/07/06 Python
Python正则表达式指南 推荐
2018/10/09 Python
python 循环数据赋值实例
2019/12/02 Python
通过python检测字符串的字母
2020/02/18 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
品质主管的岗位职责
2013/12/04 职场文书
暑期实习鉴定
2013/12/16 职场文书
运动会宣传稿50字
2015/07/23 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书