python setup.py

python setup.py 语法格式

  1. 删除 setup.py 安装的软件包

    1
    2
    3
    4
    5
    6
    通过 setup.py 安装了一个软件包,删除的时候发现 setup.py 没有 uninstall 选项
    此时,通过两个步骤可以轻松完成卸载:
    步骤一: 增加"--record"参数,重新安装
    python setup.py install --record install.txt
    步骤二: 删除安装文件
    cat install.txt|xargs rm -rf
  2. python 模块的安装方式

    1
    2
    3
    4
    5
    6
    方式一: pip install {module}
    方式二: 单文件,直接copy到 $PYTHON_DIR/lib 目录下
    方式三: 多文件,且带有 setup.py, 运行 python setup.py install
    方式四: egg文件,下载ez_setup.py,运行 python ez_setup; easy_install *.egg

    注意: 如果是自己写的安装模块,推荐制作安装包,通过setup.py来安装
  3. setup.py 文件使用方式

    1
    2
    3
    4
    5
    python setup.py build         #编译
    python setup.py install #安装
    python setup.py sdist #制作分发包
    python setup.py bdist_wininst #制作 windows 下的分发包
    python setup.py bdist_rpm #制作 windows 下的分发包
  4. setup.py 文件语法格式

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    说明: setup.py 中主要执行一个 setup 函数,该函数中大部分是描述性东西,最主要的是 packages 参数,列出所有的 package,可以用自带的 find_packages 来动态获取 package

    例如:
    from setuptools import setup,find_packages # 加载"setup"和"find_packages"函数
    setup( # 定义 setup 函数
    name = "test", # 包名称
    version = "1.0", # 包版本
    platforms = "any", # 包适用的平台
    keywords = ("test", "xxx"), # 程序关键字列表
    description = "test sdk", # 程序简要说明
    long_description = "test sdk for python", # 程序详细说明
    license = "LGPL", # 程序授权信息

    url = "http://test.com", # 程序官网地址
    author = 'smallasa' # 程序编写者
    author_email = 'samllasa@sina.com' # 程序编写者的邮箱
    #maintainer = 'smallasa' # 程序维护者
    #maintainer_email = 'smallasa@sina.com' # 程序维护者邮箱

    packages = find_packages(), # 需要处理的包目录(包含__init__.py的文件夹)
    include_package_data = True,

    install_requires = [ # 需要安装的依赖包
    'redis>=2.10.5',
    'setuptools>=16.0',
    ],

    scripts = [], #安装时需要执行的脚步列表
    entry_points = { # 动态发现服务和插件
    'console_scripts': [ # console_scripts 指明了命令行工具的名称
    'test = test.help:main' # 在 'test = test.help:main' 等号前 指明了工具包名称;等号后 指明了程序入口地址
    ]
    }
    )


    参数详解:
    --name 包名称
    --version (-V) 包版本
    --author 程序的作者
    --author_email 程序的作者的邮箱地址
    --maintainer 维护者
    --maintainer_email 维护者的邮箱地址
    --url 程序的官网地址
    --license 程序的授权信息
    --description 程序的简单描述
    --long_description 程序的详细描述
    --platforms 程序适用的软件平台列表
    --classifiers 程序的所属分类列表
    --keywords 程序的关键字列表
    --packages 需要处理的包目录(包含__init__.py的文件夹)
    --py_modules 需要打包的python文件列表
    --download_url 程序的下载地址
    --cmdclass
    --data_files 打包时需要打包的数据文件,如图片,配置文件等
    --scripts 安装时需要执行的脚步列表
    --package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': 'lib'},表示“root package”中的模块都在lib 目录中。
    --requires 定义依赖哪些模块
    --provides定义可以为哪些模块提供依赖
    --find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 __init__.py的包。

    其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。另外,也可以排除一些特定的包

    find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])

    --install_requires = ["requests"] 需要安装的依赖包
    --entry_points 动态发现服务和插件,下面详细讲