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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
Python实现高效求解素数代码实例
Jun 30 Python
Python中绑定与未绑定的类方法用法分析
Apr 29 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python getopt模块使用实例解析
Dec 18 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 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下清空字符串中的HTML标签的代码
2010/09/06 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
动手学习无线电
2021/03/10 无线电
js滚动条多种样式,推荐
2007/02/05 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
python实现取余操作的简单实例
2020/08/16 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
详解python中的异常捕获
2020/12/15 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
七年级地理教学反思
2014/01/26 职场文书
研修第一天随笔感言
2014/02/15 职场文书
实践单位评语
2014/04/26 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
工作经历证明书范文
2014/11/02 职场文书
服务员岗位职责
2015/02/03 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript