python setup

使用Python以来,基本不可逃避的就是setup.py文件,因为我们要安装各种各样的python软件或者其它第三方package,但是经常使用python setup.py install进行安装,却不甚明白该文件的工作原理。由于目前工作涉及了openstack,一个基于python的云操作系统,因此,理解一些python的基本知识是必须要的。故找时间了解了基本的python setup.py文件的制作。

一、一个简单的setup.py文件:

比如,我们经常使用的一个SSH的package:paramiko,其用于建立基于ssh协议的会话,下载地址为:https://github.com/paramiko/paramiko。

打开其中的setup.py文件,简单注释,如下所示:

[python]  view plain copy
  1. import sys
  2. from setuptools import setup            # setuptool工具
  3. if sys.platform == 'darwin':
  4. import setup_helper
  5. setup_helper.install_custom_make_tarball()
  6. # Version info -- read without importing
  7. _locals = {}
  8. with open('paramiko/_version.py') as fp:    # 获取paramiko文件的version号,注册到paramiko中
  9. exec(fp.read(), None, _locals)
  10. version = _locals['__version__']             # 写入到dict中
  11. # 介绍:https://docs.python.org/3/distutils/setupscript.html
  12. setup(
  13. # meta-data数据,此外还有maintainer,maintainer_email,
  14. # 其中name、version、url是必须的
  15. name = "paramiko",                          # package name
  16. version = version,                          # package version
  17. description = "SSH2 protocol library",      # 简要描述
  18. long_description = longdesc,                # 一般用于读取readme.txt文件的内容。。。在package发布到pypi上的时候,这项是必须的,作为package介绍
  19. author = "Jeff Forcier",                    # pacakge author
  20. author_email = "jeff@bitprophet.org",       # author's email
  21. url = "https://github.com/paramiko/paramiko/",  # 下载地址
  22. packages = [ 'paramiko' ],                  # 安装包,这里会去检索paramiko/__init__.py文件。。。也就是告诉distutils时需要处理哪些包
  23. license = 'LGPL',                           # license授权
  24. platforms = 'Posix; MacOS X; Windows',      # 平台
  25. # classifiers分类
  26. classifiers = [
  27. 'Development Status :: 5 - Production/Stable',
  28. 'Intended Audience :: Developers',
  29. 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
  30. 'Operating System :: OS Independent',
  31. 'Topic :: Internet',
  32. 'Topic :: Security :: Cryptography',
  33. 'Programming Language :: Python',
  34. 'Programming Language :: Python :: 2',
  35. 'Programming Language :: Python :: 2.6',
  36. 'Programming Language :: Python :: 2.7',
  37. 'Programming Language :: Python :: 3',
  38. 'Programming Language :: Python :: 3.2',
  39. 'Programming Language :: Python :: 3.3',
  40. 'Programming Language :: Python :: 3.4',
  41. 'Programming Language :: Python :: 3.5',
  42. ],
  43. # 依赖包,有几种符号
  44. install_requires=[
  45. 'cryptography>=1.1',
  46. 'pyasn1>=0.1.7',
  47. ],
  48. )

Setup脚本是利用distutils进行编译、发包、安装模块的主要脚本。Setup主要的目的是将我们的发布包按照distutils描述的方式组织,方便开发安装。

其实,在setup.py文件中,主要包含以下内容:

S1、列出所有的packages,使用关键字packages和package_dir两个;

S2、列出所有的依赖模块,使用py_modules;

S3、列出扩展模块,包括扩展名和包、源代码文件、预处理选项如include、library选项,以及其它的一些选项;

S4、文件发布版与依赖包的关系,使用==、>=、!=、<等

S5、直接安装scripts文件,使用scripts关键字;

S6、安装package data,使用package_data;

S7、安装一些其他文件,使用data_files;

S8、额外的meta-data数据,包括version、name、author、classifiers等,网址上介绍了meta-data数据的东西,这个是setup.py文件中必须的参数:

上面的(1)表示该字段是setup文件中必须的。这个就是我们当前的setup文件的编排格式。

二、setup文件使用:

理解了setup.py文件里面的字段含义,那么我们就可以学习setup文件的使用了,其主要有以下几种方式:
python setup.py build #编译
python setup.py install    #安装,最基本的安装方式
python setup.py sdist     #制作分发包,制作一个源码包,格式为zip/tar.gz

python setup.py bdist_egg     #制作一个二进制分发包
python setup.py bdist_wininst #制作windows下的分发包,exe程序
python setup.py bdist_rpm #制作linux下的rpm包,需要rpm程序支持

下面我们开始编写一个setup.py文件,内容如下:

[python]  view plain copy
  1. from distutils.core import setup
  2. setup(
  3. name = 'myfirsttest',
  4. version = '1.0',
  5. py_modules = ['myfirsttest']
  6. )

执行python setup.py sdist后,会生成一个文件包,里面会有对应的源码包:

到时候,客户端拿到这个压缩包后,解压,并执行python setup.py install就可以进行安装。

三、setup.cfg文件:

Stackflow上的解释:

http://stackoverflow.com/questions/27077355/how-to-use-setup-cfg-instead-of-setup-py-with-python-2-7

The problem is that the setup.cfg file does not do what you want. It does not provide parameters to the setup function. It is used to supply parameters to the commands that setup.py makes available. You can list the supported commands with setup.py --help-commands. You should see something like:

Setup.cfg并不是setup函数中的参数,而是setup.py文件中的一些参数,可以使用setup.py --help-commands命令查看:

这只是python setup.py的参数,但是这并不是直接需要写入setup.cfg文件中的。具体的,还要再继续查看,比如,sdist命令可使用的参数如下:

可以看到,当我们需要制作源码的时候,可以使用verbose、quiet等参数,这就是我们需要写入setup.cfg文件中的。

而setup.cfg的文件中是按照section去处理的,比如:

比如,当我们setup.cfg中如下时:

当我们执行python setup.py build安装的时候,实际执行的是如下命令:

参考:https://docs.python.org/2/install/index.html#distutils-configuration-files

四、distutils介绍:

setuptool通过封装distutils,简化了package的安装过程。Distutils,全称为:Python

Distribution Utilities,从python 1.6以来,distutils已经成为python标准库的一部分,极大的简化了用户安装新模块、第三方包和标准工具,并且创建这些distribution的方式也极大的简化了。Distutils既为支持RPM的linux提供了创建RPM的方式,也提供了制作windows exe的方式。Distutils通过将setup.py、setup.cfg、source code、第三方编译包集成在一起,做成可用的package。

Distutils统一了linux和windows下python的安装方式,并不区分是rpm包还是tarball方式,只是执行python setup.py install即可进行安装。并且,可以令不同的开发者向同一块package进行工作。

一般来讲,我们会依次执行build和install,其中build会将所有的源文件进行编译,并放到同对应目录下,生成build/lib文件,源文件不限于python,也可以是C/C++。如果考虑到build的速度,可以使用--buuld-base指定build的目录。编译完成后,使用install安装,安装的过程,是将该目录下的文件拷贝到对应的代码目录下。

我们默认的安装目录是:

如果是默认的话,一般是标准的python安装目录,linux下一般prefix和exec-prefix是/usr,而windows下是C:\Program Files\Python,可以采用如下方式查询安装目录:

我们可以使用如下参数去指定install的方式:

S1、--user:linux下的用户选择,确保该用户对安装目录有权限;

S2、--home:指定安装目录:

可以与--install-purelib、--install-scripts、--install-platlib、--install-data组合使用,确认各个子条目的安装目录。

S3、--prefix:指定安装目录的前缀,如果目录不存在,则会创建一个

S4、--exe-prefix:制定扩展模块的安装目录前缀

S5、--install-scripts:指定scripts的安装目录,可以与--home、--prefix组合使用

--install-base

S6、--install-platbase

我们的配置参数有很多,但是setuptools为我们提供了一个合理的方式,就是专有的配置文件

Windows下的配置文件为:

Linux下的配置文件为:

这也就是我们经常看到的setup.cfg文件的作用,里面的配置可以如下:

当我们安装完成后,python会按照目录去搜素安装的包,其搜素的路径在sys模块中:

Sys.path中为空的表示当前目录,当我们需要搜索某一目录的时候,可以将该目录加入到sys.path中。也可以通过PATHHOME设置更改目录。

distutils官网:https://docs.python.org/2/distutils/

五、setup和pip安装的方式区别:

Setup

Pip

相同

1.包安装

1.包安装

不同

1.手动下载;

2.没有统一的管理;

3.Easy_install会调用setuptool进行安装

1.自动下载;

2.自动管理包,更新卸载更方便,执行pip uninstall即可;

3.提供了对virtualenv的管理

python setup相关推荐

  1. 解决 win10 pycurl安装出错 Command python setup.py egg_info failed with error code 10 编译安装包 安装万金油...

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yexiaohhjk/article/d ...

  2. Python setup.py开发与安装

    本文翻译自:Python setup.py develop vs install Two options in setup.py develop and install are confusing m ...

  3. ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full comm

    目录 问题 解决方法 问题 Python3.7环境下安装PySide pip install PySide Collecting PySideUsing cached PySide-1.2.4.tar ...

  4. python pip 报错 Command “python setup.py egg_info“ failed with error code 1 解决方法

    在执行 pip3 install scrapy 时遇到错误: Command "python setup.py egg_info" failed with error code 1 ...

  5. python setup.py install 安装的包 卸载方法

    增加 –record 参数重新安装软件包,执行命令: python ./setup.py install --record install.txt 删除安装文件,执行命令: cat install.t ...

  6. python setup用法_python的构建工具setup.py的方法使用示例

    python setup.py怎么写不想跟你说晚安,想挤进你被子里,抱你在怀里,给你一个晚安吻. setup.py是python的自动安装文件; 它的原理是按照命令行的调用方式去执行文件的复制和粘贴; ...

  7. pip 另一种安装方法:python setup.py install

    最近在安装prophet,使用'pip install prophet' 怎么安装都不对(报错信息附在最后[Requirement already satisfied和warning部分略去了],如果 ...

  8. 成功解决Command quot;python setup.py egg_infoquot; failed with error code 1 in C:\Users\AppData\

    成功解决Command "python setup.py egg_info" failed with error code 1 in C:\Users\AppData\ 目录 解决 ...

  9. python setup脚本编写

    本文转载自:http://lingxiankong.github.io/blog/2013/12/23/Python-setup/ 前言 其实对于setup.py和setup.cfg的关注是从Open ...

  10. pip安装软件时出现Command python setup.py egg_info failed with error code 1 in /tmp/pip-build*的解决方案

    本文只提供本人的一些经验,不代表可以解决所有人的问题. pip安装软件时出现:Command "python setup.py egg_info" failed with erro ...

最新文章

  1. RabbitMQ学习总结(3)——入门实例教程详解
  2. python sanic 向别的服务器发送post请求_Sanic框架请求与响应实例分析
  3. HDU - 3336 next运用+递推
  4. cocos2d_android 瞬间动作
  5. excel进销存管理系统_通用Excel助力企业定制开发信息化系统常用功能模块
  6. 关闭Vue计算属性自带的缓存功能
  7. 微信小程序css 华文琥珀_琥珀项目:较小的,面向生产力的Java语言功能
  8. 在jsp文件中通过超链接访问servlet_Eclipse中创建Servlet
  9. python文本进度条94页_Python学习笔记 | 实例4:文本进度条
  10. 年底了,按约定把2021 Go面试八股整理全了
  11. Java面试之阻塞队列
  12. 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)...
  13. 【转载】JS中bind方法与函数柯里化
  14. 应该怎样学习新知识?
  15. windows docker 设置镜像源_Windows10下搭建第一个Docker应用(Demo)
  16. ORACLE创建表空间、用户语句
  17. 《实用软件工程》复习知识点
  18. Linux文件系统和磁盘分区
  19. 三十九级台阶java_蓝桥杯 -- 第三十九级台阶
  20. python小游戏毕设 坦克大战小游戏设计与实现 (源码)

热门文章

  1. Elasticsearch学习-父子文档
  2. 【java案例】:模拟物流快递系统程序设计
  3. 【知识兔Excel教程】学会这 7 个Excel快捷键,提前半小时下班
  4. 如何快速制作一个简洁美观的在线产品手册
  5. 百度云BBC服务器搭建宝塔面板
  6. python_21_线程+进程+协程
  7. LRC校验-亲测可用
  8. 第三方支付转账的法律风险:仅凭支付凭证 不能认定借款关系!
  9. 酒店开发微信公众号预订系统有哪些好处?
  10. [UE4] UI部分