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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
使用Python对Csv文件操作实例代码
May 12 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
python3.x 生成3维随机数组实例
Nov 28 Python
如何在django中运行scrapy框架
Apr 22 Python
Python 分布式缓存之Reids数据类型操作详解
Jun 24 Python
python连接mysql有哪些方法
Jun 24 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
php微信开发之关注事件
2018/06/14 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python获取Linux发行版名称
2019/08/30 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
经济管理自荐书
2014/06/09 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年招生工作总结
2014/11/26 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
物业接待员岗位职责
2015/04/15 职场文书
初一语文教学反思
2016/03/03 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏