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项目发布为exe可执行程序过程分享
Oct 23 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python及PyCharm下载与安装教程
Nov 18 Python
Python返回数组/List长度的实例
Jun 23 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
教你用python控制安卓手机
May 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
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
JS创建类和对象的两种不同方式
2014/08/08 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
Vue数据绑定实例写法
2019/08/06 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python购物车程序简单代码
2018/04/18 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python编写计算器功能
2019/10/25 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
食品安全工作实施方案
2014/03/26 职场文书
测控技术自荐信
2014/06/05 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android