openstack nova 源码分析1

这是nova源码的setup脚本,有些我加了 注释,当然很多我也不是很明白希望大家一起探讨。

  
  
  
  
  1. import gettext  
  2. import glob  
  3. import os  
  4. import subprocess  
  5. import sys  
  6.  
  7. from setuptools import find_packages  
  8. from setuptools.command.sdist import sdist  
  9.  
  10. # In order to run the i18n commands for compiling and  
  11. # installing message catalogs, we use DistUtilsExtra.  
  12. # Don't make this a hard requirement, but warn that  
  13. # i18n commands won't be available if DistUtilsExtra is  
  14. # not installed...  
  15. try:  
  16.     from DistUtilsExtra.auto import setup  
  17. except ImportError:  
  18.     from setuptools import setup  
  19.     print "Warning: DistUtilsExtra required to use i18n builders. " 
  20.     print "To build nova with support for message catalogs, you need " 
  21.     print "  https://launchpad.net/python-distutils-extra >= 2.18" 
  22.  
  23. gettext.install('nova', unicode=1)  
  24.  
  25. from nova.utils import parse_mailmap, str_dict_replace  
  26. from nova import version  
  27.  
  28. if os.path.isdir('.bzr'):   #判断路径  
  29.     with open("nova/vcsversion.py"'w') as version_file: #with as用法,用version_file来代替,可读写打开文件,  
  30.         vcs_cmd = subprocess.Popen(["bzr""version-info""--python"],  
  31.                                    stdout=subprocess.PIPE)  
  32.          #创建一个指针实例(打开进程文件指针)  
  33.         vcsversion = vcs_cmd.communicate()[0]#其中有2个参数见下面注释  
  34.         """  
  35.         def communicate(self, input=None):  
  36.           
  37.                     来自subProcess的Popen的解释  
  38.         Interact with process: Send data to stdin.  Read data from  
  39.         stdout and stderr, until end-of-file is reached.  Wait for  
  40.         process to terminate.  The optional input argument should be a  
  41.         string to be sent to the child process, or None, if no data  
  42.         should be sent to the child.  
  43.  
  44.         communicate() returns a tuple (stdout, stderr).""" 
  45.         version_file.write(vcsversion)#即时向其中写入  
  46.           
  47. '''''注意  这个version_file  
  48. (This file is automatically generated by generate_version_info  
  49. It uses the current working tree to determine the revision.  
  50. So don't edit it. :)  
  51.  
  52. ''''  
  53.  
  54.  
  55. class local_sdist(sdist):  
  56.     """Customized sdist hook - builds the ChangeLog file from VC first""" 
  57.     #构建changlogFile  
  58.     def run(self):  
  59.         if os.path.isdir('.bzr'):  
  60.             # We're in a bzr branch  
  61.             env = os.environ.copy()  
  62.             env['BZR_PLUGIN_PATH'] = os.path.abspath('./bzrplugins')  
  63.             #创建一个指针实例(打开进程文件指针)  
  64.             log_cmd = subprocess.Popen(["bzr""log""--novalog"],  
  65.                                        stdout=subprocess.PIPE, env=env)  
  66.             #打开上面给的给的目录你会发现有个novalog文件里面有一个Init.py  
  67.             #而这个.py证明这是一个模块  
  68.             changelog = log_cmd.communicate()[0]  
  69.             #下面这4行代码,求高人指点啊  
  70.             mailmap = parse_mailmap()  
  71.               
  72.             with open("ChangeLog""w") as changelog_file:  
  73.                 changelog_file.write(str_dict_replace(changelog, mailmap))  
  74.         sdist.run(self)  
  75. nova_cmdclass = {'sdist': local_sdist}  
  76.  
  77.  
  78. try:  
  79.     from sphinx.setup_command import BuildDoc  
  80.  
  81.     class local_BuildDoc(BuildDoc):  
  82.         def run(self):  
  83.             for builder in ['html''man']:  
  84.                 self.builder = builder  
  85.                 self.finalize_options()  
  86.                 BuildDoc.run(self)  
  87.     nova_cmdclass['build_sphinx'] = local_BuildDoc  
  88.  
  89. except:  
  90.     pass 
  91.  
  92.  
  93. try:  
  94.     #我猜想应该是抽取目录吧  
  95.       
  96.     from babel.messages import frontend as babel  
  97.     nova_cmdclass['compile_catalog'] = babel.compile_catalog  
  98.     nova_cmdclass['extract_messages'] = babel.extract_messages  
  99.     nova_cmdclass['init_catalog'] = babel.init_catalog  
  100.     nova_cmdclass['update_catalog'] = babel.update_catalog  
  101. except:  
  102.     pass 
  103.  
  104. #是指找到数据文件?求高人指点  
  105. def find_data_files(destdir, srcdir):  
  106.     package_data = []  
  107.     files = []  
  108.     for d in glob.glob('%s/*' % (srcdir, )):  
  109.         if os.path.isdir(d):  
  110.             package_data += find_data_files(  
  111.                                  os.path.join(destdir, os.path.basename(d)), d)  
  112.         else:  
  113.             files += [d]  
  114.     package_data += [(destdir, files)]  
  115.     return package_data  
  116. #这个可能就是程序打包的部分里面的知识了,scripts是指指定目录下的脚本  
  117. setup(name='nova',  
  118.       version=version.canonical_version_string(),  
  119.       description='cloud computing fabric controller',  
  120.       author='OpenStack',  
  121.       author_email='[email protected]',  
  122.       url='http://www.openstack.org/',  
  123.       cmdclass=nova_cmdclass,  
  124.       packages=find_packages(exclude=['bin''smoketests']),  
  125.       include_package_data=True,  
  126.       test_suite='nose.collector',  
  127.       data_files=find_data_files('share/nova''tools'),  
  128.       scripts=['bin/nova-ajax-console-proxy',  
  129.                'bin/nova-api',  
  130.                'bin/nova-compute',  
  131.                'bin/nova-console',  
  132.                'bin/nova-dhcpbridge',  
  133.                'bin/nova-direct-api',  
  134.                'bin/nova-logspool',  
  135.                'bin/nova-manage',  
  136.                'bin/nova-network',  
  137.                'bin/nova-objectstore',  
  138.                'bin/nova-scheduler',  
  139.                'bin/nova-spoolsentry',  
  140.                'bin/stack',  
  141.                'bin/nova-volume',  
  142.                'bin/nova-vncproxy',  
  143.                'tools/nova-debug'],  
  144.         py_modules=[])  

 

你可能感兴趣的:(openstack,nova分析,nova源码分析,openstack源码分析)