📜  打包和发布Python代码(1)

📅  最后修改于: 2023-12-03 15:25:44.868000             🧑  作者: Mango

打包和发布Python代码

在Python开发中,我们通常会用到很多第三方库和依赖,而将这些库和代码打包成可发布的形式,则是一个必要的步骤。在本文中,我们将介绍如何打包和发布Python代码。

打包Python代码
使用setuptools

setuptools是Python的一个常用包管理工具,可以将Python代码打包成可发布的形式。首先,我们需要在项目根目录下创建一个名为setup.py的文件,并在其中指定打包相关的信息。例如:

from setuptools import setup

setup(
    name='foo',
    version='0.1',
    packages=['foo', 'foo.bar'],
    entry_points={
        'console_scripts': [
            'foo = foo.__main__:main'
        ]
    }
)

其中,name指定了打包的名称,version指定了版本号。packages指定了需要打包的Python包,entry_points则指定了可执行文件入口。

接着,我们可以使用setuptools提供的命令打包项目:

$ python setup.py sdist

这将会在项目根目录下生成一个dist目录,其中包含了打包的文件。我们可以使用pip安装这个打包文件:

$ pip install dist/foo-0.1.tar.gz

现在,我们就可以在其他项目中引入这个打包后的代码了。

使用flit

flit是一个轻量级的Python包管理工具,支持使用INI文件的方式定义打包信息。首先,我们需要在项目根目录下创建一个名为pyproject.toml的文件,并在其中指定打包相关的信息。例如:

[build-system]
requires = [
    "flit"
]
build-backend = "flit.buildapi"

[tool.flit.metadata]
module = "foo"
author = "Your Name"
author-email = "you@example.com"
home-page = "https://github.com/example/foo"
summary = "A short description of your project"
requires-python = ">=3.6"

[tool.flit.scripts]
foo = "foo.__main__:main"

其中,module指定了需要打包的Python包,author和author-email分别指定了作者和联系邮箱。home-page指定了项目的主页,summary指定了项目的简要说明,requires-python指定了Python的版本要求。scripts则定义了可执行文件入口。

然后,我们可以使用flit提供的命令打包项目:

$ flit build

这将会在项目根目录下生成一个dist目录,其中包含了打包的文件。我们可以使用pip安装这个打包文件:

$ pip install dist/foo-0.1-py3-none-any.whl

现在,我们就可以在其他项目中引入这个打包后的代码了。

发布Python代码

将代码打包成发布的形式只是第一步,我们还需要将这个包发布到一个远程仓库中,以方便他人使用。常用的Python包管理仓库有PyPI和TestPyPI。

发布到PyPI

PyPI是Python的官方包管理仓库。我们可以使用Twine工具将打包的文件上传到PyPI。首先,我们需要安装Twine和wheel:

$ pip install twine wheel

接着,我们可以使用Twine将打包的文件上传到PyPI:

$ twine upload dist/*

这将会将dist目录下的所有文件上传到PyPI。上传成功后,我们就可以在其他项目中使用pip安装这个包了:

$ pip install foo
发布到TestPyPI

TestPyPI是用于测试的Python包管理仓库,与PyPI类似。我们可以使用它来测试我们打包的文件是否符合要求。首先,我们需要在TestPyPI上注册一个账号。然后,我们可以使用Twine将打包的文件上传到TestPyPI:

$ twine upload --repository-url https://test.pypi.org/legacy/ dist/*

这将会将dist目录下的所有文件上传到TestPyPI。上传成功后,我们就可以在其他项目中使用pip安装这个包了:

$ pip install -i https://test.pypi.org/simple/ foo

请注意,在使用TestPyPI发布包时,我们需要在setup.py或pyproject.toml文件中指定repository属性:

# setup.py
from setuptools import setup

setup(
    # ...
    repository='https://test.pypi.org/legacy/'
)

# pyproject.toml
[tool.flit.metadata]
# ...
repository-url = "https://test.pypi.org/legacy/"

现在,我们已经学会了如何打包和发布Python代码,让我们开始享受编写Python包的乐趣吧!