发布你自己的Python包
发布你自己的Python包
想必很多同学都有着自己觉得写得很和好、很得意的 Python 代码,那为什么不共享出来呢?本篇博客要做的就是手把手教你如何打包并发布自己的Python包。
一个小项目
我们现建立一个小项目,这个项目也就是我们要发布的 Python 包,我们现在就叫它 example_project
吧。
下面我们来建立文件结构:
/example_pkg
/example_pkg
__init__.py
像上面一样建立两个文件夹和一个 __init__.py
文件。当你完成后,你需要在项目的根目录执行这个教程的所有命令,所以一定要记得
cd example_pkg
注意!是 cd
到最外层的那个 example_pkg
在 example_pkg/__init__.py
中输入代码
先输入下面的代码,这样我们就能在教程后面验证你已经成功安装了你发布的包。
name = "exmple_pkg"
之后在文件中输入你的代码
创建包中的文件
为了发布这个包,我们需要按下面的列表创建一揽子文件。
/example_pkg
/example_pkg
__init__.py
setup.py
LICENSE
README.md
创建 setup.py
setup.py
是 setuptools
的编译脚本。本文件会告诉 setuptools
关于你的包的信息(譬如名字和版本号)以及包中的代码文件
- 打开
setup.py
并输入下面的代码(别忘了把例子中的信息替换成自己的)
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="example_pkg",
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",
],
)
关于
setup()
的详细设置参见官方文档。
创建 README.md
- 打开
setup.py
并输入下面的代码(同样别忘了把例子中的信息替换成自己的)
# Example Package
This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.
创建 LICENSE
LICENSE
十分重要,不仅在法律上十分重要,在装逼上也很重要!
想要找一个理想的
LICENSE
参见 这里
当你选好了 LICENSE
后打开 LICENSE
复制黏贴一下就好。下面我们用 MIT LICENSE
举个例子🌰:
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.
打包项目准备分发📦
现在就是打包项目的时间了,打包上传到 Python Package Index
上的项目可以通过 pip
安装。
首先确认你的
setuptools
和wheel
都是最新的
python3 -m pip install --user --upgrade setuptools wheel
然后在项目根目录执行
python3 setup.py sdist bdist_wheel
之后你会发现 dist
文件夹中发现两个新文件:
dist/
example_pkg-0.0.1-py3-none-any.whl
example_pkg-0.0.1.tar.gz
上传打包好的项目到 PyPI
首先呢,你需要一个 PyPI
账号。点击这里注册
注册完后我们使用 twine
来上传文件
python3 -m pip install --user --upgrade twine
在安装好 twine
后,为了不一次次地重复输入用户名密码,我们在 home
文件夹下创建 .pypirc
vim ~/.pipyrc
在 .pypirc
中写入以下代码并保存退出(记得把 <username>
和 <password>
换成 用户名
和 密码
)
[distutils]
index-servers =
pypi
pypitest
[pypitest]
repository: https://testpypi.python.org/pypi/
username: <username>
password: <password>
[pypi]
repository: https://upload.pypi.org/legacy/
username: <username>
password: <password>
现在我们就开始上传吧
python3 -m twine upload dist/*
之后你会看到如下提示
Uploading distributions to https://test.pypi.org/legacy/
Uploading example_pkg-0.0.1-py3-none-any.whl
100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s]
Uploading example_pkg-0.0.1.tar.gz
100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s]
这是候就上传完成了
你可以通过如下命令查询你的包是否已经同步到 pip
分发网络中
python3 -m pip search example_pkg
安装你的包
上传完了后就一定要试用一下自己的包了
python3 -m pip install example_pkg
在看到如下提示后,安装就成功了
Collecting example_pkg
Downloading https://test-files.pythonhosted.org/packages/.../example_pkg-0.0.1-py3-none-any.whl
Installing collected packages: example-pkg
Successfully installed example-pkg-0.0.1
测试
打开 python
python3
测试发布的包
>>> import example_pkg
>>> example_pkg.name
输出
'example_pkg'
好了,大功告成!✨ 🍰 ✨
⏫如果对 发布 Python
包有更多不解,参见官方文档
📦如果对 打包 Python
包有更多不解,参见官方文档
🌰如果想看一看 Python
包的 例子,参见示例项目
This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://Great-Li-Xin.github.io/2018/08/16/pkg-py-projs/