发布你自己的Python包

Author Avatar
李欣 8月 16, 2018
  • 在其它设备中阅读本文章

发布你自己的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.pysetuptools 的编译脚本。本文件会告诉 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 安装。

首先确认你的 setuptoolswheel 都是最新的

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/