分享

openstack nova 源码分析1-setup脚本

sstutu 发表于 2014-11-18 14:44:17 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 18990
导读:
本文只为参考,下面如有更好理解,欢迎讨论





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

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



相关内容:



openstack nova 源码分析2之nova-api,nova-compute
http://www.aboutyun.com/thread-10091-1-1.html


openstack nova 源码分析3-nova目录下的service.py、driver.py
http://www.aboutyun.com/thread-10092-1-1.html


openstack nova 源码分析4-1 -nova/virt/libvirt目录下的connection.py
http://www.aboutyun.com/thread-10094-1-1.html


openstack nova 源码分析4-2 -nova/virt/libvirt目录下的connection.py
http://www.aboutyun.com/thread-10095-1-1.html





出处http://brucemars.blog.51cto.com/5288106/964069

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条