程序员人生 网站导航

python setup

栏目:服务器时间:2016-07-23 10:27:26

python setup

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

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

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

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

[python] view plain copy
 在CODE上查看代码片派生到我的代码片
  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,                # 1般用于读取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选项,和其它的1些选项;

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

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

S6、安装package data,使用package_data

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

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

 

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

2、setup文件使用:

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

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

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


[python] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. from distutils.core import setup  
  2. setup(  
  3.     name = 'myfirsttest',  
  4.     version = '1.0',  
  5.     py_modules = ['myfirsttest']  
  6. )  


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



到时候,客户端拿到这个紧缩包后,解压,并履行python setup.py install就能够进行安装。

3、setup.cfg文件:

Stackflow上的解释:

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

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文件中的1些参数,可使用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

4、distutils介绍:

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

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

Distutils统1了linuxwindowspython的安装方式,其实不辨别是rpm包还是tarball方式,只是履行python setup.py install便可进行安装。并且,可以令不同的开发者向同1块package进行工作。

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

我们默许的安装目录是:

 

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

 

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

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

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

 

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

S3--prefix

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐