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

每个体系结构/操作系统需要两个存档:

  1. 即时客户端基本精简版
  2. 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)

  • 首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索具有外键的JPA实体的约定是什么?   java事务没有使用事务和嵌套方法的2个实例回滚   SpringBootJavaMessageFormat。使用umlauts格式(ä/ö/ü)   java如何通过字符串在sqlite中搜索列   JAVAlang.ClassNotFoundException:org。冬眠Hibernate4的例外情况   java消息正文在Gmail中被弄乱了   java Apache Ignite未使用空值更新缓存   Java正则表达式未捕获组   java onBackPressed();除非我叫super否则不行。onBackPressed();两次密码   java CustomAlertDialog在删除数据库记录后未完成其进程   C++中的迭代器(Stl)与java,是否存在概念上的区别?   Java在不知道字符编码的情况下将字节[]转换为字符串   来自本地WSDL文件的java Web服务客户端   java工具可用于在一个位置聚合所有项目相关信息   java在Netbeans中的maven项目中设置依赖项