• Packaging a Python project


    Packaging 的相关内容/用法

    https://packaging.python.org/tutorials/packaging-projects/

    https://packaging.python.org/guides/distributing-packages-using-setuptools/

    https://packaging.python.org/

    Packaging 的 tutorial

    https://python-packaging.readthedocs.io/en/latest/index.html

     https://python-packaging-tutorial.readthedocs.io/en/latest/setup_py.html

    https://blog.ionelmc.ro/2014/05/25/python-packaging/    //这篇blog对于Python project 的 structure 有详细说明

    开始一个Python package

    sampleproject是一个比较好的开始一个python project的template,推荐大家使用它: https://github.com/pypa/sampleproject。

    Package的基本步骤

    1. 准备好代码,以及合理的目录结构

    2. 编写配置文件,使用setuptools(或者distutils)一般情况下都是使用setup.py(setup.cfg一般配置setup.py的command相关的参数),其中的配置项和参数具体参考这里

    3. 打包

    python setup.py sdist
    python setup.py bdist_wheel //打wheel 包

    4. 上传pypi或者私有artifactory 比如Jfrog.

    Future packaging

    传统的打包方式是使用setuptools(distutils),但是PEP517和PEP518一起引入了新的打包方式。PEP518引入了新的配置文件pyproject.toml, PEP517引入了新的配置项,可以在pyproject.toml中配置打包工具相关内容(比如使用其他打包工具flit)。

    我在打包过程中的pitfalls

     1. __init__.py 

    在__init__.py中尽量保持简洁,不推荐把main()放在__init__.py中(https://github.com/pypa/sampleproject就是这么做的),在__init__.py中可以定义__all__,这样在使用

    from pkg import *

    的时候,就会import所有定义在__all__中的object,一个例子:

    __all__ = [
        "__version__",
        "ClassName1",
        "ClassName2",
        ...
    ]

    如果不指定的话,import *一般不会把package里面的所有内容都import 进来。

    另外,在__init__.py中可以定义__version__,这样的话安装好Package之后可以使用pkg.__version__来获取这个包的版本号。比如在使用setuptools_scm自动版本管理时,我们可以在__init__.py中定义如下__version__:

    from pkg_resources import get_distribution
    __version__ = get_distribution(__name__).version

    2. __main__.py

    在package中的__main__.py中一般放置main()函数的调用或者package主要cli的入口,这样可以让package能够使用'python -m pkg'命令,详细这里

    3. version的管理推荐使用setuptools_scm

    https://pypi.org/project/setuptools-scm/

  • 相关阅读:
    Redis数据类型和基本操作
    Redis持久化
    Redis安装
    MySQL5.7二进制包安装
    Django ORM多表操作
    Django中启用事务
    Django ORM单表操作
    MySQL事务
    用顺序栈实现十进制向二进制转化
    顺序栈
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/13692078.html
Copyright © 2020-2023  润新知