• 使用setuptools构建python包


    python包分发方式

    源码包分发:
    源码包安装过程是先解压,再编译。最后才安装,所以其是跨平台的,由于每次安装都需要进行编译,相对于二进制包安装方式来说安装速度较慢
    解压——编译——安装

    源码包本质上是一个压缩包,其常见的各式有:
    在这里插入图片描述

    二进制包分发

    二进制包的安装过程省去了编译过程,直接进行解压安装,所以安装速度较源码包来说更快。

    由于不同平台编译出来的包无法通用,所以在发布时,需是事先编译好多个平台的包

    二进制包的常见格式有:
    在这里插入图片描述

    eggs 与wheels的区别:

    • Egg格式有 S e t u p t o o l s Setuptools Setuptools 在2004年引入的,而Wheel 格式由 PEP427 在 2012 年定义,Wheel的出现是为了替代 E g g Egg Egg
    • 其本质山是一个zip包。其现在被认为是一个 p y t h o n python python的二进制包的标准格式。

    以下是 W h e e l Wheel Wheel E g g Egg Egg的主要区别:

    • Wheel 有一个官方的 PEP427 来定义,而 Egg 没有 PEP 定义
    • Wheel 是一种分发格式,即打包格式。而 Egg 既是一种分发格式,也是一种运行时安装的格式,并且是可以被**直接 import
    • Wheel 文件不会包含 .pyc 文**件
    • Wheel 使用和 PEP376 兼容的 .dist-info 目录,而 Egg 使用 .egg-info 目录
    • Wheel 有着更丰富的命名规则
    • Wheel 是有版本的**。每个 Wheel 文件都包含 wheel 规范的版本和打包的实现**
    • Wheel 在内部被 sysconfig path type 管理,因此转向其他格式也更容易
      Wheel包可以通过pip来安装,只不过需要先安装wheel模块,然后再使用 p i p pip pip命令。
    $ pip install wheel
    $ pip wheel --wheel-dir=/local/wheels pkg
    
    
    • 1
    • 2
    • 3

    setuptools构建包的格式

    构建源码发布包:
    用于发布一个python模块或项目,将源码打包成 t a r . g z tar.gz tar.gz或者 z i p zip zip压缩包。

    $ python setup.py sdist
    
    
    • 1
    • 2

    使用 s d i s t sdist sdist将根据当前平台创建默认格式存档,再类unix平台上,将创建后缀为 t a r . g z tar.gz tar.gz g z i p gzip gzip压缩的 t a r tar tar文件分发包。而在windows文件上为zip文件。
    也可以通过指定要分布包的格式:具体如下:

    $ python setup.py sdist --formats=gztar,zip
    
    
    • 1
    • 2

    创建一个压缩 t a r b a l l tarball tarball和一个 z i p zip zip文件,可用格式为:
    在这里插入图片描述
    对以上格式,有几点需要注意以下:

    • 在版本3.5中才添加,对 x z t a r xztar xztar格式的支持》
    • z i p zip zip格式需要你事先已安装相应的模块, z i p zip zip程序或 z i p f i l e zipfile zipfile模块
      另外,可以指定归档文件的所有文件归 r o o t root root拥有。
    python setup.py sdist --owner=root --group=root
    
    
    • 1
    • 2

    构建二进制分发包

    Python模块可以打包成exe这样的二进制软件包,在windows中可以双击exe进行安装。

    $ python setup.py bdist_wininst
    
    
    • 1
    • 2

    python模块也是支持$ rpm$ 包的构建,在 Linux 中可以使用$ rpm $来安装包。

    $ python setup.py bdist_rpm
    
    
    • 1
    • 2

    python包模块支持打包成egg包。

    $ python setup.py bdist_egg
    
    
    • 1
    • 2

    如果需要安装到多个平台,即有window也有Linux,按照上面的方法,多种格式,我们要执行多次命令,为了方便可以执行如下这条命令,即可生成多个格式的进制

    $ python setup.py bdist
    
    
    • 1
    • 2

    setup.py文件编写

    setup.py简单使用示例。

    from setuptools import setup, find_packages
    
    
    setup(
        name="mytest",
        version="1.0",
        author="xxx",
        author_email="xxx@163.com",
        description="Learn to Pack Python Module",
    
        # 项目主页
        url="http://xxx.com/", 
    
        # 你要安装的包,通过 setuptools.find_packages 找到当前目录下有哪些包
        packages=find_packages()
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    关于文件的分发

    from setuptools import setup, find_packages
    
    
    setup(
        name="mytest",
        version="1.0",
        author="xxx",
        author_email="xxx@163.com",
        description="Learn to Pack Python Module",
        url="http://xxx.com/", 
        packages=find_packages(),
    
        # 安装过程中,需要安装的静态文件,如配置文件、service文件、图片等
        data_files=[
            ('', ['conf/*.conf']),
            ('/usr/lib/systemd/system/', ['bin/*.service']),
                   ],
    
        # 希望被打包的文件
        package_data={
            '':['*.txt'],
            'bandwidth_reporter':['*.txt']
                   },
        # 不打包某些文件
        exclude_package_data={
            'bandwidth_reporter':['*.txt']
                   }
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    参数解释

    重点是将python文件打包成源码包。全部都将其搞定都行啦的样子与打算。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结

    慢慢的将各种包啥的都将其搞清楚,全部都将其搞定都行啦的样子与打算。

    会自己将python文件打包成源码包。会自己整理使用,先用到代码后再说的样子都行啦的回事与样子。

  • 相关阅读:
    哈夫曼树与哈夫曼编码
    这个macOS神器,让爱怀旧的人直呼:“爷青回!”
    一文读懂苹果的差分隐私技术原理
    手动写编译器实现加减乘除运算
    基于RoBERTa-wwm动态融合模型的中文电子病历命名实体识别
    Elasticsearch:使用 Point 和 Shape 字段类型
    SQL基础理论篇(一):什么是SQL
    JVM的内存区域划分
    工控机设备安全-系统加固的意义
    count(1)、count(*)和count(列名)区别
  • 原文地址:https://blog.csdn.net/kuxingseng123/article/details/128192472