码迷,mamicode.com
首页 > 编程语言 > 详细

python setup

时间:2016-06-28 02:08:53      阅读:735      评论:0      收藏:0      [点我收藏+]

标签:

python setup

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

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

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

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

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

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

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

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

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

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

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

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

S6、安装package data,使用package_data

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

S8、额外的meta-data数据,包括versionnameauthorclassifiers等,网址上介绍了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命令可使用的参数如下:

  技术分享

可以看到,当我们需要制作源码的时候,可以使用verbosequiet等参数,这就是我们需要写入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既为支持RPMlinux提供了创建RPM的方式,也提供了制作windows exe的方式。Distutils通过将setup.pysetup.cfgsource code、第三方编译包集成在一起,做成可用的package

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

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

我们默认的安装目录是:

  技术分享

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

  技术分享

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

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

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/

五、setuppip安装的方式区别:

 

Setup

Pip

相同

1.包安装

1.包安装

不同

1.手动下载;

2.没有统一的管理;

3.Easy_install会调用setuptool进行安装

1.自动下载;

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

3.提供了对virtualenv的管理

 

python setup

标签:

原文地址:http://blog.csdn.net/zhaole524/article/details/51772586

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!