最近在学习《Head First Python》时,遇到了一个有趣的知识点。即把自己的Python模块发布到PyPI上。按照书上的步骤操作后,发现存在不少错误。无奈,在各个论坛以及官方文档的帮助下,颇费了一些周折,终于含泪发布成功。这里记录下整个过程,希望也可以帮助到其他有问题的朋友。
废话不多说,这里以《Head First Python》中的例子,讲述一下构建和发布Python模块的具体步骤。
构建步骤:
1.先在桌面上创建一个名为“nester”的文件夹
2.在新文件夹中创建一个名为“nester.py”的文件
这个文件中是我们的核心代码,编辑这个文件,添加以下代码:
"""这是"nester.py"模块,提供了一个名为print_lol()的函数,这个函
数的作用是打印列表,其中有可能包含(也可能不包含)嵌套列表"""
def print_lol(the_list):
"""这个函数取一个位置参数,名为"the_list",这可以是任何Python
列表(也可以是包含嵌套列表的列表)。所指定的列表中的每个数据项
会(递归地)输出到屏幕上,各数据项各占一行"""
for each_item in the_list:
if isinstance(each_item,list):
print_lol(each_item)
else:
print(each_item)
3.在新文件夹中创建一个名为“setup.py”的文件
这个文件包含有关发布的元数据,编辑这个文件,增加以下代码:
from distutils.core import setup
setup(
name = 'nester',
version = '1.0.0',
py_modules = ['nester'],
author = 'giserwang',
author_email = 'giserwangziheng@163.com',
url = 'http://www.headfirstlabs.com',
description = 'A simple printer of nested lists',
)
- name - 项目的名称
- version - 项目的版本。需要注意的是,PyPI上只允许一个版本存在,如果后续代码有了任何更改,再次上传需要增加版本号
- author和author_email - 项目作者的名字和邮件
- url - 项目主页的URL,一般给出代码仓库的链接
- description - 项目的简短描述
4.构建一个发布文件
按win+R打开命令行,如下图:
在C:\User\HP>后敲入cd 你的nester文件夹位置
由于我把nester文件夹放在桌面上,所以是cd C:\User\HP\Desktop\nester,再按下回车,如图所示:
然后输入命令python setup.py sdist 按下回车
接着输入命令python setup.py install 按下回车
此时Python模块已经构建完成,接下来就是发布的问题。
发布步骤:
1.注册PyPI账户
第一次在PyPI上发布项目,需要先注册PyPI账户。
注册很简单,登录PyPI – the Python Package Index,点击右上角Register,出现下面的表单,填完提交即可。
注册完账号,我们就可以开始上传项目。
2.上传项目到PyPI
在命令行键入以下命令twine upload dist/*
接着输入用户名和密码(特别需要注意的是输入密码时命令行没有显示,只管输入即可)
输入后出现错误:HTTPError: 403 Client Error: The user 'giserwang' isn't allowed to upload to project 'nester'.错误的意思是“nester”这个模块名称无法发布,这说明我们的模块命名有问题,具体的命名规则可以在https://pypi.org/help/#project-name上查看。此时需要我们修改模块的名字。我将文件夹名称修改为giserwang1111,将“nester.py”修改为“giserwang1111.py”,同时将"setup.py"文件中的nester也改为giserwang1111。
from distutils.core import setup
setup(
name = 'giserwang1111',
version = '1.0.0',
py_modules = ['giserwang1111'],
author = 'giserwang',
author_email = 'giserwangziheng@163.com',
url = 'http://www.headfirstlabs.com',
description = 'A simple printer of nested lists',
)
然后重复构建步骤第4步的命令和twine upload dist/*命令即可发布成功。
结果
我们打开PyPI – the Python Package Index来看看我们上传的项目。
可以看到项目成功地发布到PyPI上了。
以上就是构建和发布Python模块到PyPI的所有步骤。可以看到,步骤还是挺繁琐的。我上传的只是一个非常简单的模块,如果真正地想发布一个有用的模块,还需要添加其他的文档,具体可以参考 https://packaging.python.org/tutorials/packaging-projects/#
虽然整个创建和发布Python模块的过程有点繁琐,但是发布成功后还是蛮有成就感的。