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实现建立SSH连接的方法
Jun 03 Python
运动检测ViBe算法python实现代码
Jan 09 Python
Python查看微信撤回消息代码
Jun 07 Python
python实现简易动态时钟
Nov 19 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
python二进制文件的转译详解
Jul 03 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Python不支持 i ++ 语法的原因解析
Jul 22 Python
python判断变量是否为列表的方法
Sep 17 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 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
第五节--克隆
2006/11/16 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
Yii快速入门经典教程
2015/12/28 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python发送伪造的arp请求
2014/01/09 Python
python自带的http模块详解
2016/11/06 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
pytorch 模型可视化的例子
2019/08/17 Python
python代码能做成软件吗
2020/07/24 Python
Python 实现简单的客户端认证
2020/07/29 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
电子专业毕业生自荐信
2014/05/25 职场文书
红色影片观后感
2015/06/18 职场文书