glance-0.1.7 分析(一)—— 开始

本文介绍了如何在Debian 6.0上安装早期版本的OpenStack Glance (0.1.7)。通过安装setuptools和sphinx,使用python setup.py install命令完成了安装过程。文章还列举了安装过程中涉及的主要文件和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来想学习一下 OpenStack,想从 glance 入手,glance 也是一个相对比较独立的子系统。

但是其最新版比较庞大,而且依赖的包好像也挺多,环境搭建有些麻烦,遇到了一些问题。

搜了一下 OpenStack 网站,找到了其最初的版本,可能还没有集成好 nova 和 swift。不过,

只是想快速了解一下其实现框架,从简单的入手可以节省时间。等搞明白了,再看看最新的

进展是怎样的。


首先看一下 setup.py 文件,看看 glance-0.1.7 用到哪些标准安装自带之外的模块。整个文

件很短,可以看到需要预先安装下面几个模块:

        setuptools    用于支持 python setup.py 和 easy_install 命令的执行   

                             http://pypi.python.org/pypi/setuptools

        sphinx           用于生成帮助文档           

                             http://sphinx.pocoo.org/

安装 setuptools (http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html)这个东西

很简单,先去下载一个脚本: 

        http://peak.telecommunity.com/dist/ez_setup.py 

下载完后直接执行它就会帮你把setuptools给装好了:

        # python ez_setup.py

ez_setup.py 试图在后台下载并安装 setuptools。


setuptools 最大的优势是它在包管理能力方面的增强。它可以使用一种更加透明的方法来查

找、下载并安装依赖包;并可以在一个包的多个版本中自由进行切换,这些版本都安装在同

一个系统上;也可以声明对某个包的特定版本的需求;还可以只使用一个简单的命令就能更

新到某个包的最新版本。这里只是简单了解,并不打算深入 setuptools 本身,感兴趣的可以

参考:

        http://peak.telecommunity.com/DevCenter/setuptools


对于 sphinx,已经安装了 setuptools,直接 easy_install 安装就好了:

        # easy_install sphinx

easy_install 可以自动解决依赖性问题;easy_install 要在 www.python.org/pypi/ 上查找有关

依赖包的信息,然后查找真正可以下载这些包的地方去下载并安装包。


glance-0.1.7 中的 setup.py 是非常简单的,install_requires=[] 说明也没有使用什么特殊的包。

当然,实际用到的一些包 easy_install 都会帮你来安装好。在 Debian 6.0 上安装 glance-0.1.7

很顺利:

glance-0.1.7# python setup.py install
running install
Checking .pth file support in /usr/local/lib/python2.6/dist-packages/
/usr/bin/python -E -c pass
TEST PASSED: /usr/local/lib/python2.6/dist-packages/ appears to support .pth files
running bdist_egg
running egg_info
writing glance.egg-info/PKG-INFO
writing top-level names to glance.egg-info/top_level.txt
writing dependency_links to glance.egg-info/dependency_links.txt
reading manifest file 'glance.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'LICENSE'
warning: no files found matching 'tests/test_data.py'
writing manifest file 'glance.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-i686/egg
running install_lib
running build_py
creating build
creating build/lib.linux-i686-2.6
creating build/lib.linux-i686-2.6/glance
copying glance/client.py -> build/lib.linux-i686-2.6/glance
copying glance/server.py -> build/lib.linux-i686-2.6/glance
copying glance/util.py -> build/lib.linux-i686-2.6/glance
copying glance/__init__.py -> build/lib.linux-i686-2.6/glance
creating build/lib.linux-i686-2.6/glance/registry
copying glance/registry/client.py -> build/lib.linux-i686-2.6/glance/registry
copying glance/registry/server.py -> build/lib.linux-i686-2.6/glance/registry
copying glance/registry/__init__.py -> build/lib.linux-i686-2.6/glance/registry
creating build/lib.linux-i686-2.6/glance/common
copying glance/common/exception.py -> build/lib.linux-i686-2.6/glance/common
copying glance/common/utils.py -> build/lib.linux-i686-2.6/glance/common
copying glance/common/server.py -> build/lib.linux-i686-2.6/glance/common
copying glance/common/wsgi.py -> build/lib.linux-i686-2.6/glance/common
copying glance/common/flags.py -> build/lib.linux-i686-2.6/glance/common
copying glance/common/__init__.py -> build/lib.linux-i686-2.6/glance/common
creating build/lib.linux-i686-2.6/glance/store
copying glance/store/filesystem.py -> build/lib.linux-i686-2.6/glance/store
copying glance/store/http.py -> build/lib.linux-i686-2.6/glance/store
copying glance/store/swift.py -> build/lib.linux-i686-2.6/glance/store
copying glance/store/__init__.py -> build/lib.linux-i686-2.6/glance/store
copying glance/store/s3.py -> build/lib.linux-i686-2.6/glance/store
creating build/lib.linux-i686-2.6/tests
creating build/lib.linux-i686-2.6/tests/unit
copying tests/unit/test_clients.py -> build/lib.linux-i686-2.6/tests/unit
copying tests/unit/swiftfakehttp.py -> build/lib.linux-i686-2.6/tests/unit
copying tests/unit/test_stores.py -> build/lib.linux-i686-2.6/tests/unit
copying tests/unit/test_api.py -> build/lib.linux-i686-2.6/tests/unit
copying tests/unit/__init__.py -> build/lib.linux-i686-2.6/tests/unit
copying tests/unit/test_registry_api.py -> build/lib.linux-i686-2.6/tests/unit
creating build/lib.linux-i686-2.6/glance/registry/db
copying glance/registry/db/api.py -> build/lib.linux-i686-2.6/glance/registry/db
copying glance/registry/db/__init__.py -> build/lib.linux-i686-2.6/glance/registry/db
creating build/lib.linux-i686-2.6/glance/common/db
copying glance/common/db/__init__.py -> build/lib.linux-i686-2.6/glance/common/db
creating build/lib.linux-i686-2.6/glance/store/backends
copying glance/store/backends/__init__.py -> build/lib.linux-i686-2.6/glance/store/backends
creating build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy
copying glance/registry/db/sqlalchemy/api.py -> build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy
copying glance/registry/db/sqlalchemy/models.py -> build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy
copying glance/registry/db/sqlalchemy/__init__.py -> build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy
creating build/lib.linux-i686-2.6/glance/common/db/sqlalchemy
copying glance/common/db/sqlalchemy/session.py -> build/lib.linux-i686-2.6/glance/common/db/sqlalchemy
copying glance/common/db/sqlalchemy/__init__.py -> build/lib.linux-i686-2.6/glance/common/db/sqlalchemy
creating build/bdist.linux-i686
creating build/bdist.linux-i686/egg
creating build/bdist.linux-i686/egg/glance
creating build/bdist.linux-i686/egg/glance/registry
creating build/bdist.linux-i686/egg/glance/registry/db
copying build/lib.linux-i686-2.6/glance/registry/db/api.py -> build/bdist.linux-i686/egg/glance/registry/db
copying build/lib.linux-i686-2.6/glance/registry/db/__init__.py -> build/bdist.linux-i686/egg/glance/registry/db
creating build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy/api.py -> build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy/models.py -> build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/registry/db/sqlalchemy/__init__.py -> build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/registry/client.py -> build/bdist.linux-i686/egg/glance/registry
copying build/lib.linux-i686-2.6/glance/registry/server.py -> build/bdist.linux-i686/egg/glance/registry
copying build/lib.linux-i686-2.6/glance/registry/__init__.py -> build/bdist.linux-i686/egg/glance/registry
creating build/bdist.linux-i686/egg/glance/common
creating build/bdist.linux-i686/egg/glance/common/db
copying build/lib.linux-i686-2.6/glance/common/db/__init__.py -> build/bdist.linux-i686/egg/glance/common/db
creating build/bdist.linux-i686/egg/glance/common/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/common/db/sqlalchemy/session.py -> build/bdist.linux-i686/egg/glance/common/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/common/db/sqlalchemy/__init__.py -> build/bdist.linux-i686/egg/glance/common/db/sqlalchemy
copying build/lib.linux-i686-2.6/glance/common/exception.py -> build/bdist.linux-i686/egg/glance/common
copying build/lib.linux-i686-2.6/glance/common/utils.py -> build/bdist.linux-i686/egg/glance/common
copying build/lib.linux-i686-2.6/glance/common/server.py -> build/bdist.linux-i686/egg/glance/common
copying build/lib.linux-i686-2.6/glance/common/wsgi.py -> build/bdist.linux-i686/egg/glance/common
copying build/lib.linux-i686-2.6/glance/common/flags.py -> build/bdist.linux-i686/egg/glance/common
copying build/lib.linux-i686-2.6/glance/common/__init__.py -> build/bdist.linux-i686/egg/glance/common
creating build/bdist.linux-i686/egg/glance/store
copying build/lib.linux-i686-2.6/glance/store/filesystem.py -> build/bdist.linux-i686/egg/glance/store
copying build/lib.linux-i686-2.6/glance/store/http.py -> build/bdist.linux-i686/egg/glance/store
copying build/lib.linux-i686-2.6/glance/store/swift.py -> build/bdist.linux-i686/egg/glance/store
copying build/lib.linux-i686-2.6/glance/store/__init__.py -> build/bdist.linux-i686/egg/glance/store
copying build/lib.linux-i686-2.6/glance/store/s3.py -> build/bdist.linux-i686/egg/glance/store
creating build/bdist.linux-i686/egg/glance/store/backends
copying build/lib.linux-i686-2.6/glance/store/backends/__init__.py -> build/bdist.linux-i686/egg/glance/store/backends
copying build/lib.linux-i686-2.6/glance/client.py -> build/bdist.linux-i686/egg/glance
copying build/lib.linux-i686-2.6/glance/server.py -> build/bdist.linux-i686/egg/glance
copying build/lib.linux-i686-2.6/glance/util.py -> build/bdist.linux-i686/egg/glance
copying build/lib.linux-i686-2.6/glance/__init__.py -> build/bdist.linux-i686/egg/glance
creating build/bdist.linux-i686/egg/tests
creating build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/test_clients.py -> build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/swiftfakehttp.py -> build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/test_stores.py -> build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/test_api.py -> build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/__init__.py -> build/bdist.linux-i686/egg/tests/unit
copying build/lib.linux-i686-2.6/tests/unit/test_registry_api.py -> build/bdist.linux-i686/egg/tests/unit
byte-compiling build/bdist.linux-i686/egg/glance/registry/db/api.py to api.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/db/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy/api.py to api.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy/models.py to models.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/db/sqlalchemy/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/client.py to client.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/server.py to server.pyc
byte-compiling build/bdist.linux-i686/egg/glance/registry/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/db/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/db/sqlalchemy/session.py to session.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/db/sqlalchemy/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/exception.py to exception.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/utils.py to utils.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/server.py to server.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/wsgi.py to wsgi.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/flags.py to flags.pyc
byte-compiling build/bdist.linux-i686/egg/glance/common/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/filesystem.py to filesystem.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/http.py to http.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/swift.py to swift.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/s3.py to s3.pyc
byte-compiling build/bdist.linux-i686/egg/glance/store/backends/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/glance/client.py to client.pyc
byte-compiling build/bdist.linux-i686/egg/glance/server.py to server.pyc
byte-compiling build/bdist.linux-i686/egg/glance/util.py to util.pyc
byte-compiling build/bdist.linux-i686/egg/glance/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/test_clients.py to test_clients.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/swiftfakehttp.py to swiftfakehttp.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/test_stores.py to test_stores.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/test_api.py to test_api.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/tests/unit/test_registry_api.py to test_registry_api.pyc
creating build/bdist.linux-i686/egg/EGG-INFO
installing scripts to build/bdist.linux-i686/egg/EGG-INFO/scripts
running install_scripts
running build_scripts
creating build/scripts-2.6
copying and adjusting bin/glance-api -> build/scripts-2.6
copying and adjusting bin/glance-registry -> build/scripts-2.6
copying and adjusting bin/glance-upload -> build/scripts-2.6
changing mode of build/scripts-2.6/glance-api from 644 to 755
changing mode of build/scripts-2.6/glance-registry from 644 to 755
changing mode of build/scripts-2.6/glance-upload from 644 to 755
creating build/bdist.linux-i686/egg/EGG-INFO/scripts
copying build/scripts-2.6/glance-upload -> build/bdist.linux-i686/egg/EGG-INFO/scripts
copying build/scripts-2.6/glance-api -> build/bdist.linux-i686/egg/EGG-INFO/scripts
copying build/scripts-2.6/glance-registry -> build/bdist.linux-i686/egg/EGG-INFO/scripts
changing mode of build/bdist.linux-i686/egg/EGG-INFO/scripts/glance-upload to 755
changing mode of build/bdist.linux-i686/egg/EGG-INFO/scripts/glance-api to 755
changing mode of build/bdist.linux-i686/egg/EGG-INFO/scripts/glance-registry to 755
copying glance.egg-info/PKG-INFO -> build/bdist.linux-i686/egg/EGG-INFO
copying glance.egg-info/SOURCES.txt -> build/bdist.linux-i686/egg/EGG-INFO
copying glance.egg-info/dependency_links.txt -> build/bdist.linux-i686/egg/EGG-INFO
copying glance.egg-info/top_level.txt -> build/bdist.linux-i686/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
glance.common.utils: module references __file__
glance.common.utils: module MAY be using inspect.stack
creating dist
creating 'dist/glance-0.1.7-py2.6.egg' and adding 'build/bdist.linux-i686/egg' to it
removing 'build/bdist.linux-i686/egg' (and everything under it)
Processing glance-0.1.7-py2.6.egg
creating /usr/local/lib/python2.6/dist-packages/glance-0.1.7-py2.6.egg
Extracting glance-0.1.7-py2.6.egg to /usr/local/lib/python2.6/dist-packages
Removing glance 2012.2 from easy-install.pth file
Adding glance 0.1.7 to easy-install.pth file
Installing glance-upload script to /usr/local/bin
Installing glance-api script to /usr/local/bin
Installing glance-registry script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/glance-0.1.7-py2.6.egg
Processing dependencies for glance==0.1.7
Finished processing dependencies for glance==0.1.7
root@crossover:/home/snailpy/dev/glance-0.1.7# ls
bin	     ChangeLog	glance		 PKG-INFO  run_tests.py  setup.py
build	     dist	glance.egg-info  pylintrc  run_tests.sh  tests
builddeb.sh  doc	MANIFEST.in	 README    setup.cfg	 tools
root@crossover:/home/snailpy/dev/glance-0.1.7# cd build/
root@crossover:/home/snailpy/dev/glance-0.1.7/build# ls
bdist.linux-i686  lib.linux-i686-2.6  scripts-2.6
root@crossover:/home/snailpy/dev/glance-0.1.7/build# ls -l
total 12
drwxr-xr-x 2 root root 4096 May 31 11:05 bdist.linux-i686
drwxr-xr-x 4 root root 4096 May 31 11:05 lib.linux-i686-2.6
drwxr-xr-x 2 root root 4096 May 31 11:05 scripts-2.6
root@crossover:/home/snailpy/dev/glance-0.1.7/build# cd ..
root@crossover:/home/snailpy/dev/glance-0.1.7# ls
bin	     ChangeLog	glance		 PKG-INFO  run_tests.py  setup.py
build	     dist	glance.egg-info  pylintrc  run_tests.sh  tests
builddeb.sh  doc	MANIFEST.in	 README    setup.cfg	 tools
root@crossover:/home/snailpy/dev/glance-0.1.7# cd bin/
root@crossover:/home/snailpy/dev/glance-0.1.7/bin# ls
glance-api  glance-registry  glance-upload
root@crossover:/home/snailpy/dev/glance-0.1.7/bin# cd ..
root@crossover:/home/snailpy/dev/glance-0.1.7# ls
bin	     ChangeLog	glance		 PKG-INFO  run_tests.py  setup.py
build	     dist	glance.egg-info  pylintrc  run_tests.sh  tests
builddeb.sh  doc	MANIFEST.in	 README    setup.cfg	 tools
root@crossover:/home/snailpy/dev/glance-0.1.7# easy_install sphinx
Searching for sphinx
Reading http://pypi.python.org/simple/sphinx/
Reading http://sphinx.pocoo.org/
Best match: Sphinx 1.1.3
Downloading http://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.1.3-py2.6.egg#md5=f0873b56630070f661ec3abc3eaf4457
Processing Sphinx-1.1.3-py2.6.egg
creating /usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg
Extracting Sphinx-1.1.3-py2.6.egg to /usr/local/lib/python2.6/dist-packages
Adding Sphinx 1.1.3 to easy-install.pth file
Installing sphinx-apidoc script to /usr/local/bin
Installing sphinx-build script to /usr/local/bin
Installing sphinx-quickstart script to /usr/local/bin
Installing sphinx-autogen script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg
Processing dependencies for sphinx
Searching for docutils>=0.7
Reading http://pypi.python.org/simple/docutils/
Reading http://docutils.sourceforge.net/
Best match: docutils 0.9
Downloading http://prdownloads.sourceforge.net/docutils/docutils-0.9.tar.gz?download
Processing docutils-0.9.tar.gz
Writing /tmp/easy_install-_FFcyu/docutils-0.9/setup.cfg
Running docutils-0.9/setup.py -q bdist_egg --dist-dir /tmp/easy_install-_FFcyu/docutils-0.9/egg-dist-tmp-BcQStB
warning: no files found matching 'MANIFEST'
warning: no files found matching '*' under directory 'extras'
warning: no previously-included files matching '.cvsignore' found under directory '*'
warning: no previously-included files matching '*.pyc' found under directory '*'
warning: no previously-included files matching '*~' found under directory '*'
warning: no previously-included files matching '.DS_Store' found under directory '*'
zip_safe flag not set; analyzing archive contents...
docutils.writers.odf_odt.__init__: module references __file__
docutils.writers.latex2e.__init__: module references __file__
docutils.writers.html4css1.__init__: module references __file__
docutils.writers.s5_html.__init__: module references __file__
docutils.writers.pep_html.__init__: module references __file__
docutils.parsers.rst.directives.misc: module references __file__
Adding docutils 0.9 to easy-install.pth file
Installing rst2xml.py script to /usr/local/bin
Installing rst2odt.py script to /usr/local/bin
Installing rst2pseudoxml.py script to /usr/local/bin
Installing rst2odt_prepstyles.py script to /usr/local/bin
Installing rst2latex.py script to /usr/local/bin
Installing rst2html.py script to /usr/local/bin
Installing rst2man.py script to /usr/local/bin
Installing rst2s5.py script to /usr/local/bin
Installing rstpep2html.py script to /usr/local/bin
Installing rst2xetex.py script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/docutils-0.9-py2.6.egg
Searching for Jinja2>=2.3
Reading http://pypi.python.org/simple/Jinja2/
Reading http://jinja.pocoo.org/
Best match: Jinja2 2.6
Downloading http://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.6.tar.gz#md5=1c49a8825c993bfdcf55bb36897d28a2
Processing Jinja2-2.6.tar.gz
Writing /tmp/easy_install-RhD8iu/Jinja2-2.6/setup.cfg
Running Jinja2-2.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-RhD8iu/Jinja2-2.6/egg-dist-tmp-_FFu6x
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no previously-included files matching '*.pyc' found under directory 'jinja2'
warning: no previously-included files matching '*.pyc' found under directory 'docs'
warning: no previously-included files matching '*.pyo' found under directory 'jinja2'
warning: no previously-included files matching '*.pyo' found under directory 'docs'
Adding Jinja2 2.6 to easy-install.pth file

Installed /usr/local/lib/python2.6/dist-packages/Jinja2-2.6-py2.6.egg
Searching for Pygments>=1.2
Reading http://pypi.python.org/simple/Pygments/
Reading http://pygments.org/
Reading http://pygments.pocoo.org/
Best match: Pygments 1.5
Downloading http://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.5-py2.6.egg#md5=359d667ed004b6d1bee20917a7d06a7b
Processing Pygments-1.5-py2.6.egg
creating /usr/local/lib/python2.6/dist-packages/Pygments-1.5-py2.6.egg
Extracting Pygments-1.5-py2.6.egg to /usr/local/lib/python2.6/dist-packages
Adding Pygments 1.5 to easy-install.pth file
Installing pygmentize script to /usr/local/bin

Installed /usr/local/lib/python2.6/dist-packages/Pygments-1.5-py2.6.egg
Finished processing dependencies for sphinx
安装完毕。以后就在 glance-0.1.7 上先活动一下筋骨了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值