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 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
python之django母板页面的使用
Jul 03 Python
Python比较配置文件的方法实例详解
Jun 06 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
python selenium xpath定位操作
Sep 01 Python
python制作微博图片爬取工具
Jan 16 Python
Python进程间的通信之语法学习
Apr 11 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制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
java解析json方法总结
2019/05/16 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
JS实现仿PS的调色板效果完整实例
2016/12/21 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
品质主管的岗位职责
2013/12/04 职场文书
大学军训感言
2014/01/10 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
幼儿教师国培感言
2014/02/19 职场文书
《白鹅》教学反思
2014/04/13 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
放弃继承权公证书
2015/01/23 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android