参考链接:https://www.jianshu.com/p/6019aee27883
本文描述将已经完成的Python项目打包并上传到PyPI,使其他人可以通过 pip 命令安装这个Python包
项目目录结构如下:
其中 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 网站注册一个账号。如果仅仅为练习使用,可以注册 test.pypi。任何上传至 test.pypi 的项目将会在一段时间之后被删除。
执行如下命令:
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 命令去安装这个软件包了