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 21 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
import的本质解析
Oct 30 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
python,Java,JavaScript实现indexOf
Sep 09 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php实现点击可刷新验证码
2015/11/07 PHP
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
详解angular中的作用域及继承
2017/05/31 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
python flask中动态URL规则详解
2019/11/22 Python
python多维数组分位数的求取方式
2020/03/03 Python
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
小学二年级评语
2014/04/21 职场文书
文明班级建设方案
2014/05/15 职场文书
广播体操比赛口号
2014/06/10 职场文书
关于颐和园的导游词
2015/01/30 职场文书
大足石刻导游词
2015/02/02 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
三好学生竞选稿
2015/11/21 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android