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开发微信支付的注意事项
Aug 19 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
通过python爬虫赚钱的方法
Jan 29 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
详解python数据结构和算法
Apr 18 Python
Flask框架单例模式实现方法详解
Jul 31 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
numpy库reshape用法详解
Apr 19 Python
Python根据字符串调用函数过程解析
Nov 05 Python
Python中logging日志的四个等级和使用
Nov 17 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中防止SQL注入实现代码
2011/02/19 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
PDO::query讲解
2019/01/29 PHP
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
深入学习JavaScript对象
2015/10/13 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
React中阻止事件冒泡的问题详析
2019/04/12 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python搜索指定目录的方法
2015/04/29 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python实现图片拼接的代码
2018/07/02 Python
python获取地震信息 微信实时推送
2019/06/18 Python
Python文件操作函数用法实例详解
2019/12/24 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
2014高中生入党思想汇报范文
2014/09/13 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
交通安全横幅标语
2014/10/07 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
元旦晚会开场白
2015/05/29 职场文书
退休欢送会主持词
2015/07/01 职场文书
婚宴来宾致辞
2015/07/28 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
HTML基本元素标签介绍
2022/02/28 HTML / CSS