当我们完成了某个模块开发后,可以将其对外发布,其他开发者也可以以”第三方扩展库“的方式使用我们的模块。
我们按照如下步骤即可实现模块的发布:
一、模块的本地发布
1.为模块文件创建如下结构的文件夹、包和模块文件(Demo 是对外发布的模块名):
demo1.py 的内容结构如下:
# -*- coding: utf-8 -*-
"""
@Author: runqian_lee
@Blog: https://blog.csdn.net/qq_44214671
@Time: 2020/12/17 15:50
@Desc: demo1 模块设计
"""
def func():
print('This is Demo1')
demo2.py 的内容结构如下:
# -*- coding: utf-8 -*-
"""
@Author: runqian_lee
@Blog: https://blog.csdn.net/qq_44214671
@Time: 2020/12/17 15:51
@Desc: demo2 模块设计
"""
def func():
print('This is Demo2')
2.在 release 文件夹中创建一个名为 setup.py 文件,在文件中输入以下内容:
from distutils.core import setup
setup(
name='Demo', # 对外我们模块的名字
version='1.0', # 版本号
description='测试本地发布模块', # 描述
author='runqian_lee', # 作者
author_email='[email protected]',
py_modules=['Demo.demo1', 'Demo.demo2'], # 要发布的模块
)
3.构建一个发布文件。打开终端,cd 到 release 目录下,键入以下命令:
python setup.py sdist
执行完毕后,目录的结构如下:
4.本地安装模块
将发布安装到你的本地计算机上。仍在 cmd 命令行模式下操作,进 setup.py 所在目 录,键入命令:
python setup.py install
5.安装成功后,我们进入 python 工程目录:venv/Lib/site-packages 目录(第三方模块都安装的这里,python 解释器执行时也会搜索这个路径):
6.使用 import 导入该模块进行使用:
from Demo import demo1, demo2
demo1.func()
demo2.func()
运行结果:
This is Demo1
This is Demo2
二、上传模块到 PyPI
将自己开发好的模块上传到 PyPI 网站上,将成为公开的资源,可以让全球用户自由使用。上传步骤如下:
1.注册 PyPI 网站,填写对应的名字、邮箱、用户名和密码即可完成注册:
Tips: 注册后需要验证邮箱:
2.创建用户信息文件 .pypirc 文件:
-
方式1:使用命令(适用 Linux)
输入命令:python setup.py register
并执行后 ,然后输入用户名和密码即可。 -
方式2:使用文件(适用 windows,Linux)
在用户目录:user目录下创建一个文件名为 .pypirc, 输入以下内容:
[distutils]
index-servers=pypi
[pypi] repository = https://upload.pypi.org/legacy/
username = 账户名
password = 密码
Tips:
- Linux 的用户目录: ~/.pypirc
- Windows 的用户目录是: c:/user/用户名
- 在 Windows 下直接创建不包含文件名的文件会失败,因此创建时文件名为 “.pypirc.”, 前后都有两个点即可。
3.上传并远程发布:
进入 setup.py 文件所在目录,使用命令:python setup.py sdist upload
,即可以将模块代码上传并发布。
我在这里出现了以下错误:
error: Upload failed (403): The user 'R_lee' isn't allowed to upload to project 'demo'
可能是模块命名问题,与他人的模块名有冲突,官网上有解释:
所以我将原模块名:Demo,改成了 Demo01,再尝试后成功上传:
(venv) E:\PythonProject\release>python setup.py sdist upload
running sdist
running check
warning: check: missing required meta-data: url
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating Demo01-1.0
creating Demo01-1.0\Demo01
making hard links in Demo01-1.0...
hard linking setup.py -> Demo01-1.0
hard linking Demo01\__init__.py -> Demo01-1.0\Demo01
hard linking Demo01\demo1.py -> Demo01-1.0\Demo01
hard linking Demo01\demo2.py -> Demo01-1.0\Demo01
Creating tar archive
removing 'Demo01-1.0' (and everything under it)
running upload
Submitting dist\Demo01-1.0.tar.gz to https://upload.pypi.org/legacy/
Server response (200): OK
上传成功后就可以看到你上传的模块了:
4.下载安装并使用上传的模块
当你看到在 Python 官网上也能像安装其他第三方包一样安装你自己上传的包,是不是有一种成就和自豪感!
安装同样可以使用 pip 工具进行安装:pip install Demo01
,或者通过 PyCharm 中的其它安装方式进行安装。
安装成功后同样使用 import 导入包:
from Demo01 import demo1, demo2
demo1.func()
demo2.func()
运行结果:
This is Demo1
This is Demo2