PyPI教程

0x01、简介

Wiki PyPI

The Python Package Index, abbreviated as PyPI and also known as the Cheese Shop (a reference to the Monty Python's Flying Circus sketch Cheese Shop),[1][2] is the official third-party software repository for Python.[3] It is analogous to CPAN, the repository for Perl.[4] Some package managers, including pip, use PyPI as the default source for packages and their dependencies.[5][6] Over 113,000 Python packages can be accessed through PyPI.[7]

就是说PyPI(Python Package Index)是Python官方的第三方库,所有人都可以下载或上传Python库到PyPI。

0x02、流程

1、注册账号

想要上传自己的Python包没PyPI账号怎么行!官网地址

图片

2、项目架构

1、项目环境:

  • python3
  • pip
  • setuptools
  • wheel
  • twine

2、项目文件

如果想上传一个名为 "debug_world" 的Python包,那么她的项目文件如下:

-- packaging_tutorial      # 项目名字
    -- debug_world         # 包名字
        -- __init__.py     # 一定要有init文件
        -- print_str.py    # 功能实现
    -- __init__.py         # 一定要有init文件
    -- README.md           # 一般记录具体使用方法
    -- setup.py            # 打包程序
图片

print_str.py文件实现三个功能,代码如下:

def debug_world():
    print('世界很美好,我去如此暴躁,这样不好不好')


def hello_world():
    print('Hello, world')


def hello_python():
    print('Hello Python\nPython 大法好')

setup.py文件代码如下:

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="debug-world",                                     # 包的分发名称,使用字母、数字、_、-
    version="0.0.1",                                        # 版本号, 版本号规范:https://www.python.org/dev/peps/pep-0440/
    author="liheyou",                                       # 作者名字
    author_email="author@example.com",                      # 作者邮箱
    description="PyPI Tutorial",                            # 包的简介描述
    long_description=long_description,                      # 包的详细介绍(一般通过加载README.md)
    long_description_content_type="text/markdown",          # 和上条命令配合使用,声明加载的是markdown文件
    url="https://github.com/",                              # 项目开源地址,我这里写的是同性交友官网,大家可以写自己真实的开源网址
    packages=setuptools.find_packages(),                    # 如果项目由多个文件组成,我们可以使用find_packages()自动发现所有包和子包,而不是手动列出每个包,在这种情况下,包列表将是example_pkg
    classifiers=[                                           # 关于包的其他元数据(metadata)
        "Programming Language :: Python :: 3",              # 该软件包仅与Python3兼容
        "License :: OSI Approved :: MIT License",           # 根据MIT许可证开源
        "Operating System :: OS Independent",               # 与操作系统无关
    ],
    install_requires=['pymysql>=0.10.0', 'retrying==1.3.3', 'xlrd>=1.2.0', 'openpyxl>=3.0.5'],  # 依赖的包
    python_requires='>=3'
)

# 这是最简单的配置
# 有关详细信息,请参阅(https://packaging.python.org/guides/distributing-packages-using-setuptools/)

这里是最简单的配置,有关详细信息,请参阅打包和分发项目

3、本地打包

确保pip,setuptools和wheel是最新的。
虽然pip就能够保证安装成功,但是最新的setuptools和wheel对安装有益无害。

While pip alone is sufficient to install from pre-built binary archives, up to date copies of the setuptools and wheel projects are useful to ensure you can also install from source archives:

python -m pip install --upgrade pip setuptools wheel

进入setup.py同级目录,然后运行打包程序

# 运行setup.py
python setup.py sdist
# 或者
python setup.py sdist bdist_wheel

此时项目会出现两个新文件:


图片

4、上传PyPI

运行把Python包上传到PyPI的命令

pip install twine     # 如果已经安装twine,跳过次步骤
python -m twine upload dist/*

# 接着会让你输入PyPI用户名和密码,注意不是邮箱和密码
# 出现下面信息说明成功,如有错误信息,检查setup.py配置信息
Uploading distributions to https://upload.pypi.org/legacy/
Uploading debug-world-0.0.1.tar.gz 
100%█████████████████████████| 5.56k/5.56k [00:01<00:00, 3.98kB/s]

如果不想每次上传都输入账号和密码,可以创建用户验证文件 ** ~/.pypirc**
# 而且此方法不安全,容易泄露密码, 因为密码是明文
[distutils]
index-servers =
    pypi

[pypi]
repository: https://upload.pypi.org/legacy/
username: <username>
password: <password>

然后就可以去PyPI官网查看你的包是否成功上传了


图片

3、验证

PyPI推荐通过pip使用Python包

pip install debug-world

新建验证文件 verify_pypi.py

from debug_world import print_str

print(print_str.hello_world())
print(print_str.debug_world())
print(print_str.hello_python())

查看运行结果,说明成功了

Hello, world
世界很美好,我去如此暴躁,这样不好不好
Hello Python    Python 大法好

4、删除版本

当想要删除某一版本的时候,只需在官网项目管理页面进行删除即可。
输入相对应的版本号。


图片

0x03、注意事项

  • 包名一定是别人没用过的
  • 项目文件一定要有** init.py**
  • 运行setup.py文件一定要同级目录
  • 在上传PyPI的是时候输入的是用户名和密码,不是邮箱和密码
  • 上传之后需要等一段时间,才能下载最新版本的包
  • 更改包的时候一定要修改版本号
  • pip 按照版本号安装,==前后没有空格

0x04、报错

HTTPError: 400 Client Error: File already exists: 版本号错误
HTTPError: 403 Client Error: Invalid or non-existent authentication information: 密码错误
error: invalid command 'bdist_wheel':

# 升级pip的安装工具setuptools
sudo pip install --upgrade setuptools
# 然后更新包
python -m pip install --upgrade pip setuptools wheel

0x05、参考

Wiki PyPI
Python Packaging User Guide

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,718评论 0 10
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,956评论 1 3
  • 一、困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑)。主要表现在下面几个方面: 这几个...
    PyChina阅读 1,183评论 1 6
  • 想记录下今天。 初来乍到,身体遭受不少苦。看了很多次病,见了不同的医生,也吃了很多药。 但也有暖心的瞬间啊。 医生...
    hellosun27阅读 253评论 0 0
  • 《靓女的眼神》淅淅沥沥的小雨带着浓雾,从阴历二月初五日就开始下了,今晚己是十一日的晚上了,整整下了六天雨,由于...
    阿馼阅读 584评论 0 0