当前位置 博文首页 > 用Python将库打包发布到pypi

    用Python将库打包发布到pypi

    作者:Alden He 时间:2021-04-28 17:44

    如果需要将自己写好的python打包,并发布到pypi,这样其他人就可以直接通过pip install来安装对应的包,可以参考如下教程

    1. 注册pypi账号并创建token

    首先访问https://pypi.org/ 并注册账号
    然后跳转到账号设置

    在这里插入图片描述

    然后选择API token->Add API token

    在这里插入图片描述

    输入token name并在Scope中选择Entire account(第一次需要选择Entire account)

    在这里插入图片描述

    然后在本地,修改.pypirc文件
    输入的内容为:

    [pypi]
    username = __token__
    password = {token}
    

    只需要修改{token}为自己的token即可

    2. 编写setup.py和setup.cfg

    setup.cfg的内容为

    [metadata]
    license_files = LICENSE.txt

    LICENSE.txt是license文件,需要自行编写
    setup.py在根目录下,一个示例为

    from setuptools import setup
    import compileall
    from os import path
    # 读取readme文件,这样可以直接显示在主页上
    this_directory = path.abspath(path.dirname(__file__))
    with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
        long_description = f.read()
    
    compileall.compile_dir("src")
    
    setup(
        name='my-python',
        version='1.0.2',
        packages=['src',
                  'src.main',
                  'src.main.config'],
        url='https://github.com/hTangle',
        license='Apache 2.0',
        author='hTangle',
        author_email='',
        description='',
        keywords='',
        python_requires='>=3.4, <4',
        long_description=long_description,
        long_description_content_type='text/markdown',
        install_requires=['requests']
    )
    

    具体的字段含义如下:

    name: 包名

    version: 版本号,支持如下形式

    1.2.0.dev1  # Development release
    1.2.0a1     # Alpha Release
    1.2.0b1     # Beta Release
    1.2.0rc1    # Release Candidate
    1.2.0       # Final Release
    1.2.0.post1 # Post Release
    15.10       # Date based release
    23          # Serial release
    

    description: 包描述,会放在如下图所示的位置处

    在这里插入图片描述

    url: 包的链接,可以使用github链接,pypi会自动获取到仓库的信息,示例如下:


    在这里插入图片描述

    author: 作者

    license: 许可证

    classifiers: 分类,示例如下:

    classifiers=[
        # How mature is this project? Common values are
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
        'Development Status :: 3 - Alpha',
    
        # Indicate who your project is intended for
        'Intended Audience :: Developers',
        'Topic :: Software Development :: Build Tools',
    
        # Pick your license as you wish (should match "license" above)
        'License :: OSI Approved :: MIT License',
    
        # Specify the Python versions you support here. In particular, ensure
        # that you indicate whether you support Python 2, Python 3 or both.
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
    ],
    

    keywords: 关键字,和论文的关键字类似

    project_urls: 一些项目的其他链接,示例如下

    project_urls={
        'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
        'Funding': 'https://donate.pypi.org',
        'Say Thanks!': 'http://saythanks.io/to/example',
        'Source': 'https://github.com/pypa/sampleproject/',
        'Tracker': 'https://github.com/pypa/sampleproject/issues',
    },
    

    packages: 需要打包的目录,需要以根目录为起点,可以使用

    find_packages自动查找包,注意不要漏写

    install_requires: 包依赖的其他包

    python_requires: python的版本需求

    package_data: 需要的额外的文件,例如包强依赖一个本地文件,可以使用如下

    package_data={
        'sample': ['package_data.dat'],
    },

    3. 打包

    打包命令为

    python setup.py cmd

    cmd可以取值为

    bdist_wheel : create a wheel distribution

    bdist_egg : create an “egg” distribution

    sdist : create a source distribution (tarball, zip file, etc.)

    bdist : create a built (binary) distribution

    bdist_dumb : create a “dumb” built distribution

    bdist_rpm : create an RPM distribution

    bdist_wininst : create an executable installer for MS Windows

    打包为tar.gz

    python setup.py sdist

    打包好的文件再dist目录下

    4. 上传

    可以首先使用twine对包进行检查

    twine check dist/*
    

    输出如下

    在这里插入图片描述

    再运行上传命令

    twine upload dist/*
    js
    下一篇:没有了