打包Python项目并发布到PyPI

参考链接:https://www.jianshu.com/p/6019aee27883

本文描述将已经完成的Python项目打包并上传到PyPI,使其他人可以通过 pip 命令安装这个Python包

一、打包项目的必须文件

项目目录结构如下:

打包Python项目并发布到PyPI_第1张图片

其中 setup.py,README.md 和 LICENSE 文件是必须的。

1、setup.py

setup.py包含了软件包的信息,如:名称,作者,版本及包含的数据和程序文件等。文件示例如下:

from setuptools import setup, find_packages
from os import path, environ

from io import open

here = path.abspath(path.dirname(__file__))

with open(path.join(here, 'README.md'), encoding='utf-8') as f:
    long_description = f.read()

setup(
    name='my-package',
    version=1.0,
    description='My first python package',
    author='kevin',
    author_email='[email protected]',
    classifiers=[  # Optional
        'Development Status :: 4 - Beta',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',

        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
    ],
    python_requires='>=3.6, <4',
    install_requires=[
        'asyncio==3.4.3',
        'websockets==8.1',
        'base58==1.0.3',
        'certifi==2019.6.16',
        'chardet==3.0.4',
        'idna==2.8',
        'requests==2.22.0',
        'urllib3==1.25.3',
        'xxhash==1.3.0',
        'scalecodec>=0.9.26'
    ],
)

文件的主要关键字含义如下:

  • name : 软件包的名称。该名称由字母,数字,_-组成。并且不能与其他已经上传至pypi.org的项目相同
  • version : 软件包的版本
  • author : 作者
  • author_email : 作者邮箱地址
  • description :软件包的描述信息
  • long_description : 软件包的长描述信息
  • url :软件包的主页链接
  • classifiers : 当前软件包的其他元数据信息(metadata)。例如兼容的python版本和操作系统;提供的功能的类型及许可证等等。应当总是至少包括当前软件包所支持的python版本,操作系统和许可证信息
  • packages :包含在发布软件包文件中的可被import的python包文件。我们可以手动罗列所有文件。或者使用函数自动包含所有的python包文件以及子包文件
  • install_requires :指定了当前软件包所依赖的其他python类库。这些指定的python类库将会在本package被安装的时候一并被安装

除了上面列出的关键字,其他的关键字含义具体可以参考 官方的说明文档 。

2、README.md

README.md 文件包含了该软件包的详细说明信息。

3、LICENSE

LICENSE文件指定了当前软件包的使用许可证。上传至PyPI的软件包应当包含一个许可证文件。这一文件明确了使用当前软件包的用户应当遵守怎样的使用协议。关于如何选择开源软件许可证,读者可以参考 https://choosealicense.com/

二、生成软件包文件

下面打包我们的软件并生成 Python 软件分发包(distribution packages)。这些文件可以被上传至PyPI并由其他用户通过 pip 命令安装。

1、安装 setuptools和 wheel

python -m pip install --user --upgrade setuptools wheel

2、打包程序

在 setup.py文件所处目录下执行如下命令:

python setup.py sdist bdist_wheel

命令运行结束后,会在当前目录下生成dist目录,该目录下包含相应的.whl文件和.tar.gz文件。其中.tar.gz文件是源文件,.whl是软件分发包 (build distribution) 。使用pip命令安装软件包时首先尝试安装软件分发包,在失败情况下会接着尝试采用源文件包安装。

三、上传到PyPI

首先在 PyPI 网站注册一个账号。如果仅仅为练习使用,可以注册 test.pypi。任何上传至 test.pypi 的项目将会在一段时间之后被删除。

  • 安装 twine

执行如下命令:

python -m pip install --user --upgrade twine
  • 上传项目

上传项目时需要使用PyPI的账号和密码。执行如下命令:

# upload to test PyPI
python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

# upload to real PyPI
python -m twine upload dist/*

现在就可以通过 pip 命令去安装这个软件包了

你可能感兴趣的:(Python)