zc.buildout安装cx_Oracle的方法
gocept.cxoracle的Python项目详细描述
gocept.cx oracle-一个zc.buildout配方,可以轻松地让cx_oracle运行
构建的示例可能如下:
[buildout] develop = . parts = python-oracle cx_Oracle test python = python-oracle [python-oracle] recipe = gocept.cxoracle instant-client = .../instantclient-basiclite-macosx-10.2.0.4.0.zip instant-sdk = .../instantclient-sdk-macosx-10.2.0.4.0.zip [cx_Oracle] recipe = zc.recipe.egg:custom egg = cx_Oracle [test] recipe = zc.recipe.testrunner eggs = test.some.egg
gocept.cx oracle-一个zc.buildout配方,可以轻松让cx_oracle运行
主要目的是建立构建cx_oracle egg所需的环境 然后提供一个加载程序,该加载程序设置加载 共享库。
Oracle不允许自由分发所需的库。那个 意味着用户或开发人员必须从 http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
每个体系结构/操作系统需要两个存档:
- 即时客户端基本精简版
- sdk
>>> import os.path >>> basiclite = os.path.join( ... os.path.dirname(__file__), 'basiclite-linux.zip') >>> sdk = os.path.join( ... os.path.dirname(__file__), 'sdk-linux.zip')
两个文件都必须在构建中配置:
>>> write("buildout.cfg", """ ... [buildout] ... parts = python-oracle ... python = python-oracle ... ... [python-oracle] ... recipe = gocept.cxoracle ... instant-client = %(basiclite)s ... instant-sdk = %(sdk)s ... ... """ % {'basiclite': basiclite, ... 'sdk': sdk} ... )
>>> print system(buildout), Installing python-oracle.
我们现在有一个神谕之家。它包含了 归档文件混合在一起plus一个符号链接,用于libclntsh.so -> libclntsh.so.10.1:
>>> ls('parts', 'python-oracle') - BASIC_LITE_README - classes12.jar - genezi - libclntsh.so - libclntsh.so.10.1 - libnnz10.so - libocci.so.10.1 - libociicus.so - libocijdbc10.so - ojdbc14.jar d sdk
>>> import os >>> os.path.islink(os.path.join('parts', 'python-oracle', 'libclntsh.so')) True >>> os.readlink(os.path.join('parts', 'python-oracle', 'libclntsh.so')) '.../parts/python-oracle/libclntsh.so.10.1'
在bin目录中,有一个包装器设置LD_LIBRARY_PATH(或 DYLD_LIBRARY_PATH达尔文)和ORACLE_HOME环境变量:
>>> ls('bin') - buildout - python-oracle
包装器可以像任何python解释器一样调用:
>>> system(os.path.join('bin', 'python-oracle') + ... """ -c "import os; print os.environ['ORACLE_HOME']" """) '.../parts/python-oracle\n'
>>> script = '''\ ... import os ... import sys ... if sys.platform == 'darwin': ... varname = 'DYLD_LIBRARY_PATH' ... else: ... varname = 'LD_LIBRARY_PATH' ... print os.environ[varname] ... '''
>>> system(os.path.join('bin', 'python-oracle') + ... """ -c "%s" """ % script) '.../parts/python-oracle\n'
在MacOSX/Darwin上,这些库不被称为.so,而是.dylib。食谱 正确处理此问题:
>>> basiclite = os.path.join( ... os.path.dirname(__file__), 'basiclite-darwin.zip') >>> sdk = os.path.join( ... os.path.dirname(__file__), 'sdk-darwin.zip')
两个文件都必须在构建中配置:
>>> write("buildout.cfg", """ ... [buildout] ... parts = python-oracle ... python = python-oracle ... ... [python-oracle] ... recipe = gocept.cxoracle ... instant-client = %(basiclite)s ... instant-sdk = %(sdk)s ... ... """ % {'basiclite': basiclite, ... 'sdk': sdk} ... )
>>> print system(buildout), Uninstalling python-oracle. Installing python-oracle.
归档文件被合并为linux,这次a符号链接是libclntsh.dylib -> libclntsh.dylib.10.1:
>>> ls('parts', 'python-oracle') - BASIC_LITE_README - classes12.jar - genezi - libclntsh.dylib - libclntsh.dylib.10.1 - libnnz10.dylib - libocci.dylib.10.1 - libociicus.dylib - libocijdbc10.dylib - libocijdbc10.jnilib - ojdbc14.jar d sdk
>>> import os >>> os.path.islink(os.path.join('parts', 'python-oracle', 'libclntsh.dylib')) True >>> os.readlink(os.path.join('parts', 'python-oracle', 'libclntsh.dylib')) '.../parts/python-oracle/libclntsh.dylib.10.1'
当无法提取存档文件时,我们将收到一个提示性错误:
>>> write("buildout.cfg", """ ... [buildout] ... parts = python-oracle ... python = python-oracle ... ... [python-oracle] ... recipe = gocept.cxoracle ... instant-client = /does/not/exist ... instant-sdk = %(sdk)s ... ... """ % {'sdk': sdk} ... )
>>> print system(buildout), Uninstalling python-oracle. Installing python-oracle. While: Installing python-oracle. <BLANKLINE> An internal error occured due to a bug in either zc.buildout or in a recipe being used: Traceback (most recent call last): ... Exception: Extraction of file '/does/not/exist' failed.
更改
0.1.1(2008-08-29)
- 固定棕色袋释放0.1
0.1(2008-08-29)
- 首次发布