zc.buildout安装cx_Oracle的配方
项目描述
gocept.cxoracle - 一个zc.buildout配方,可以轻松运行cx_Oracle
一个示例buildout可能看起来像这样
[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.cxoracle - 一个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')
两个文件都必须在buildout中进行配置
>>> 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.
我们现在在parts中有一个oracle-home。它包含两个存档的内容 以及 一个指向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(或在darwin上的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'
在Mac OS X / 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')
两个文件都必须在buildout中进行配置
>>> 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一样合并,这次符号链接是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)
修复brown bag发布0.1
0.1 (2008-08-29)
第一个版本
项目详细信息
关闭
gocept.cxoracle-0.1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5880f9896e38c67b8847c16aba5bee2a2599119ce409e4291bfd8157e008dfb9 |
|
MD5 | dbf8ddb5e4cf88d6cbd014e5f87c96d0 |
|
BLAKE2b-256 | aafb496a682212f64a08b1cbb5af9b1039c7d327fd4d1e2eeb6df07a1624d100 |