您当前的位置: 首页 >  Python

彭世瑜

暂无认证

  • 1浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python:打包配置文件 setup.py 详解

彭世瑜 发布时间:2021-02-04 10:31:12 ,浏览量:1

1、项目打包工具:

  1. distutils 是 Python 的一个标准库
  2. setuptools 是 distutils 增强版,不包括在标准库中
  3. distribute 是 setuptools 一个分支版本
  4. distutils2 废弃

2、安装 setuptools

文档: https://setuptools.readthedocs.io/

  1. 方式一:源码安装

https://pypi.org/project/setuptools/#files下载 zip 包解压

$ python setup.py install
  1. 方式二:通过引导程序安装
$ wget http://peak.telecommunity.com/dist/ez_setup.py

# 安装
$ python ez_setup.py

# 更新,以下两种任选
$ python ez_setup.py –U setuptools
$ pip install -U setuptools
  1. 方式三: pip安装
$ pip install --upgrade setuptools

3、使用 easy_install

安装完 setuptools 后,就有了easy_install 的第三方管理工具

  1. 包的安装
# 通过包名,从PyPI寻找最新版本,自动下载、编译、安装
$ easy_install pkg_name

# 通过包名从指定下载页寻找链接来安装或升级包
$ easy_install -f http://pythonpaste.org/package_index.html 

# 指定线上的包地址安装
$ easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

# 从本地的 .egg 文件安装
$ easy_install xxx.egg

# 在安装时你可以添加额外的参数
指定安装目录:--install-dir=DIR, -d DIR
指定用户安装:--user
  1. 包的升级
# 从 pypi 中搜索并升级包
$ easy_install --upgrade pkg_name

# 指定版本进行升级
$ easy_install "SomePackage==2.0"
  1. 包的删除
$ easy_install -m pkg_name

若要删除彻底,需要手动删除相关的 .egg 及 其他文件

指定安装源

~/.pydistutils.cfg

[easy_install]
index-url=http://mirrors.aliyun.com/pypi/simple/
find-links=http://mirrors.aliyun.com/pypi/simple/

4、源码包与二进制包

  1. 源码包

常见后缀:.zip, .tar, .tar.gz, .tar.bz2, .tar.Z 安装的过程,是先解压,再编译,最后才安装。安装速度较慢, 跨平台

  1. 二进制包 常见后缀:.egg, .whl

安装过程:省去了编译的过程,直接进行解压安装。安装速度较快。

5、setup.py 的编写

简单的使用示例

from setuptools import setup, find_packages

setup(
    name="mytest",
    version="1.0",
    author="wangbm",
    author_email="wongbingming@163.com",

    description="Learn to Pack Python Module",

    # 项目主页
    url="http://www.baidu.com/", 

    # 你要安装的包,通过 setuptools.find_packages 找到当前目录下有哪些包
    packages=find_packages()
)

6、setup 参数

setup 函数常用的参数如下

参数说明name包名称version包版本author程序的作者author_email程序的作者的邮箱地址maintainer维护者maintainer_email维护者的邮箱地址url程序的官网地址license程序的授权信息description程序的简单描述long_description程序的详细描述platforms程序适用的软件平台列表classifiers程序的所属分类列表keywords程序的关键字列表packages需要处理的包目录(通常为包含 init.py 的文件夹)py_modules需要打包的 Python 单文件列表download_url程序的下载地址cmdclass添加自定义命令package_data指定包内需要包含的数据文件include_package_data自动包含包内所有受版本控制(cvs/svn/git)的数据文件exclude_package_data当 include_package_data 为 True 时该选项用于排除部分文件data_files打包时需要打包的数据文件,如图片,配置文件等ext_modules指定扩展模块scripts指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下package_dir指定哪些目录下的文件被映射到哪个源码包entry_points动态发现服务和插件,下面详细讲python_requires指定运行时需要的Python版本requires指定依赖的其他包provides指定可以为哪些模块提供依赖install_requires安装时需要安装的依赖包extras_require当前包的高级/额外特性需要依赖的分发包tests_require在测试时需要使用的依赖包setup_requires指定运行 setup.py 文件本身所依赖的包dependency_links指定依赖包的下载地址

setup.cfg 文件提供 setup.py 的默认参数 配置:https://docs.python.org/3/distutils/configfile.html

  1. classifiers 分类信息

参见:https://pypi.org/pypi?%3Aaction=list_classifiers

示例:

from setuptools import setup, find_packages

setup(
    classifiers = [
        # 发展时期,常见的如下
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
        'Development Status :: 3 - Alpha',

        # 开发的目标用户
        'Intended Audience :: Developers',

        # 属于什么类型
        'Topic :: Software Development :: Build Tools',

        # 许可证信息
        'License :: OSI Approved :: MIT License',

        # 目标 Python 版本
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
    ]
)
  1. 文件的分发
from setuptools import setup, find_packages


setup(
    name="mytest",
    version="1.0",
    author="wangbm",
    author_email="wongbingming@163.com",
    description="Learn to Pack Python Module",
    url="http://iswbm.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']
               }
)

还可以使用 MANIFEST.in

include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build

配置:https://docs.python.org/3.6/distutils/sourcedist.html

  1. 依赖包下载安装
from setuptools import setup, find_packages


setup(
    ...

    # 表明当前模块依赖哪些包,若环境中没有,则会从pypi中下载安装
    install_requires=['docutils>=0.3'],

    # setup.py 本身要依赖的包,这通常是为一些setuptools的插件准备的配置
    # 这里列出的包,不会自动安装。
    setup_requires=['pbr'],

    # 仅在测试时需要使用的依赖,在正常发布的代码中是没有用的。
    # 在执行python setup.py test时,可以自动安装这三个库,确保测试的正常运行。
    tests_require=[
        'pytest>=3.3.1',
        'pytest-cov>=2.5.1',
    ],

    # 用于安装setup_requires或tests_require里的软件包
    # 这些信息会写入egg的 metadata 信息中
    dependency_links=[
        "http://example2.com/p/foobar-1.0.tar.gz",
    ],

    # install_requires 在安装模块时会自动安装依赖包
    # 而 extras_require 不会,这里仅表示该模块会依赖这些包
    # 但是这些包通常不会使用到,只有当你深度使用模块时,才会用到,这里需要你手动安装
    extras_require={
        'PDF':  ["ReportLab>=1.2", "RXP"],
        'reST': ["docutils>=0.3"],
    }
)
  1. 安装环境的限制
setup(
    ...
    python_requires='>=2.7,             
关注
打赏
1665367115
查看更多评论
0.0562s