大家好,我是李慢慢。
考虑到后续OpenSIL项目会陆续发布一些Python模块到开源平台上,为了让大家方便下载,特地去研究了下怎么把自己的代码发布到网上,并且通过pip下载下来安装到本地,然后直接import该模块开始使用。遇到了很多坑。简单做个记录。
前言:
1、网上方法一大堆,但基本都过时了。因为官网变更的速度太快。所以官方教程才是唯一的真理。
2、我电脑上Python版本是python3.8。
3、我的系统是Ubuntu18.04。
4、以下这两个pypi网站都需要注册,但是注册时候容易显示reCapture错误,原因是加载国外的激活码,需要“梯子”,你懂的。这两个网站建议使用一样的账号和密码。
5、本文参考的官方教程链接如下:
https://packaging.python.org/en/latest/tutorials/packaging-projects/
废话不多说。开始搞。
1、更新pip工具
python3 -m pip install --upgrade pip
2、模块文件准备
文件准备,按照如下目录准备我们即将上传的python模块。exam_package_lmm就是即将发布的包,为了保证这个包能被import,需要在exam_package_lmm目录下放一个空文件__init__.py,以及实际发布的模块example.py。
example.py的内容如下:
def add_one(number):
return number + 1
3、发布参数设置
要上传的模块/包准备好了以后,再准备其他的上传配置项。目录如下所示:
其中,tests是一个测试文件夹,可以暂时留空。
pyproject.toml是一个核心配置文件。参照官网我暂时内容设置如下:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "example_package_lmm"
version = "0.0.1"
authors = [
{ name="li manman", email="li_mammam@example.com" },
]
description = "A small example package by limanman"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/DriveSlowly/OpenSIL"
"Bug Tracker" = "https://github.com/DriveSlowly/OpenSI/issues"
README.md是作者为模块使用方法而写的说明书。我这里暂时如下简单写了些内容。
# Example Package
This is a simple example package by limanman.
.
└── example_package_lmm
├── example.py
└── __init__.py
usage:
pip install example_package_lmm
python3.8
import example_package_lmm.example as e
print("input 2222, output:", e.add_one(2222))
LICENSE是这个模块的使用license许可证。暂时不是很care,就照官网设置如下了:
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.
4、生成安装包
准备工作就绪,接下来就可以开始创建要上传模块的wheel轮子文件。首先要保证自己有最新的build工具。
python3 -m pip install --upgrade build
然后开始生成轮子或者安装包。
python3 -m build
[object Object]
生成完毕后,可以看到多了个dist文件夹,下面的东西就是轮子和安装包源码。
.whl文件就是轮子,可以直接给别人。pip install就能安装这个的。不过我们这里还是要将这个发布到网上,方便所有人能pip下载。首先,更新一下最新的上传工具,twine。
5、上传发布模块/包
python3 -m pip install --upgrade twine
最后终于可以上传自己的代码到网上了。这里需要自己手动输入自己的账户名和密码。
python3 -m twine upload --repository testpypi dist/*
输入成功后,就可根据末尾的网站就可以看到自己上传到网站上的包了。
6、模块下载及测试
然后,按照网站这里给的下载安装方式,尝试安装了一下这个包。
继续尝试import这个包,开始试试我的示例函数。
成功了,小小激动了一把。
7、正式发布模块/包
不过,目前这个python模块/包是存放在TestPyPI网站的,它并不是一个很稳定的仓库,官网说系统会不定时地删除一些账户和安装包。所以,如果你的python包通过TestPyPI下载使用没啥问题了的话,还是把这个模块移交到正式的PyPI上比较好。也就是从网站(https://test.pypi.org/)转到网站(https://pypi.org/),这个也简单,通过下面这个命令更新一下就好了。
python3 -m twine upload dist/*
这样,以后安装自己的python包就不需要再指定路径了,直接就能安装啦。
又一个周末没有了。
学有所得,瑞斯拜。