2009-07-20 7 views
6

Pythonインタプリタを使用してPythonプログラムを実行すると、pythonプログラム(Python 2.6)が正常に動作し、エラーなしでOracleデータベース(10g XE) 。ただし、py2exeを使用してコンパイルすると、cx_Oracle.connect()の呼び出し時に実行可能なバージョンが「Oracle環境ハンドルを取得できません」というエラーが発生します。py2exeのプログラムからOracleに接続する際のエラー:Oracle環境ハンドルを取得できません

ノー喜びで、次の試してみた:

  • のOracleインスタントクライアント10gおよび11g
  • のOracle XE Clientの
  • をcx_Oracle-5.0.2-10g.win32-py2.6を再インストールします。 ORACLE_HOMEだけでなく、PATH
  • ちょうどOracleクライアントを持つ別のコンピュータやexeファイルbuildiため
  • さまざまなオプションを設定するMSI
  • exeファイル(圧縮なしおよび/または使用したzipファイルを)ngの

私のテストケース:

testora.py:

import cx_Oracle 
import decimal # needed for py2exe to compile this correctly 

def testora(): 
    """testora 

    >>> testora.testora() 
    <cx_Oracle.Connection to [email protected]:1521/orcl> 
    X 
    """ 
    orcl = cx_Oracle.connect('scott/[email protected]:1521/orcl') 
    print orcl 
    curs = orcl.cursor() 
    result = curs.execute('SELECT * FROM DUAL') 
    for (dummy,) in result: 
     print dummy 

if __name__ == '__main__': 
    testora() 

build_testora.py:

from distutils.core import setup 
import py2exe, sys 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe': { 
     'bundle_files': 2, 
     'compressed': True 
     }}, 
    console = [{'script': "testora.py"}], 
    zipfile = None 
    ) 

結果:

C:\Python26\working>python testora.py 
<cx_Oracle.Connection to [email protected]:1521/orcl> 
X 

C:\Python26\working>python build_testora.py py2exe 
C:\Python26\lib\site-packages\py2exe\build_exe.py:16: DeprecationWarning: the se 
ts module is deprecated 
    import sets 
running py2exe 
creating C:\Python26\working\build 
creating C:\Python26\working\build\bdist.win32 
creating C:\Python26\working\build\bdist.win32\winexe 
creating C:\Python26\working\build\bdist.win32\winexe\collect-2.6 
creating C:\Python26\working\build\bdist.win32\winexe\bundle-2.6 
creating C:\Python26\working\build\bdist.win32\winexe\temp 
*** searching for required modules *** 
*** parsing results *** 
*** finding dlls needed *** 
*** create binaries *** 
*** byte compile python files *** 
byte-compiling C:\Python26\lib\StringIO.py to StringIO.pyc 
byte-compiling C:\Python26\lib\UserDict.py to UserDict.pyc 
byte-compiling C:\Python26\lib\__future__.py to __future__.pyc 
byte-compiling C:\Python26\lib\_abcoll.py to _abcoll.pyc 
byte-compiling C:\Python26\lib\_strptime.py to _strptime.pyc 
byte-compiling C:\Python26\lib\_threading_local.py to _threading_local.pyc 
byte-compiling C:\Python26\lib\abc.py to abc.pyc 
byte-compiling C:\Python26\lib\atexit.py to atexit.pyc 
byte-compiling C:\Python26\lib\base64.py to base64.pyc 
byte-compiling C:\Python26\lib\bdb.py to bdb.pyc 
byte-compiling C:\Python26\lib\bisect.py to bisect.pyc 
byte-compiling C:\Python26\lib\calendar.py to calendar.pyc 
byte-compiling C:\Python26\lib\cmd.py to cmd.pyc 
byte-compiling C:\Python26\lib\codecs.py to codecs.pyc 
byte-compiling C:\Python26\lib\collections.py to collections.pyc 
byte-compiling C:\Python26\lib\copy.py to copy.pyc 
byte-compiling C:\Python26\lib\copy_reg.py to copy_reg.pyc 
byte-compiling C:\Python26\lib\decimal.py to decimal.pyc 
byte-compiling C:\Python26\lib\difflib.py to difflib.pyc 
byte-compiling C:\Python26\lib\dis.py to dis.pyc 
byte-compiling C:\Python26\lib\doctest.py to doctest.pyc 
byte-compiling C:\Python26\lib\dummy_thread.py to dummy_thread.pyc 
byte-compiling C:\Python26\lib\encodings\__init__.py to encodings\__init__.pyc 
creating C:\Python26\working\build\bdist.win32\winexe\collect-2.6\encodings 
byte-compiling C:\Python26\lib\encodings\aliases.py to encodings\aliases.pyc 
byte-compiling C:\Python26\lib\encodings\ascii.py to encodings\ascii.pyc 
byte-compiling C:\Python26\lib\encodings\base64_codec.py to encodings\base64_cod 
ec.pyc 
byte-compiling C:\Python26\lib\encodings\big5.py to encodings\big5.pyc 
byte-compiling C:\Python26\lib\encodings\big5hkscs.py to encodings\big5hkscs.pyc 

byte-compiling C:\Python26\lib\encodings\bz2_codec.py to encodings\bz2_codec.pyc 

byte-compiling C:\Python26\lib\encodings\charmap.py to encodings\charmap.pyc 
byte-compiling C:\Python26\lib\encodings\cp037.py to encodings\cp037.pyc 
byte-compiling C:\Python26\lib\encodings\cp1006.py to encodings\cp1006.pyc 
byte-compiling C:\Python26\lib\encodings\cp1026.py to encodings\cp1026.pyc 
byte-compiling C:\Python26\lib\encodings\cp1140.py to encodings\cp1140.pyc 
byte-compiling C:\Python26\lib\encodings\cp1250.py to encodings\cp1250.pyc 
byte-compiling C:\Python26\lib\encodings\cp1251.py to encodings\cp1251.pyc 
byte-compiling C:\Python26\lib\encodings\cp1252.py to encodings\cp1252.pyc 
byte-compiling C:\Python26\lib\encodings\cp1253.py to encodings\cp1253.pyc 
byte-compiling C:\Python26\lib\encodings\cp1254.py to encodings\cp1254.pyc 
byte-compiling C:\Python26\lib\encodings\cp1255.py to encodings\cp1255.pyc 
byte-compiling C:\Python26\lib\encodings\cp1256.py to encodings\cp1256.pyc 
byte-compiling C:\Python26\lib\encodings\cp1257.py to encodings\cp1257.pyc 
byte-compiling C:\Python26\lib\encodings\cp1258.py to encodings\cp1258.pyc 
byte-compiling C:\Python26\lib\encodings\cp424.py to encodings\cp424.pyc 
byte-compiling C:\Python26\lib\encodings\cp437.py to encodings\cp437.pyc 
byte-compiling C:\Python26\lib\encodings\cp500.py to encodings\cp500.pyc 
byte-compiling C:\Python26\lib\encodings\cp737.py to encodings\cp737.pyc 
byte-compiling C:\Python26\lib\encodings\cp775.py to encodings\cp775.pyc 
byte-compiling C:\Python26\lib\encodings\cp850.py to encodings\cp850.pyc 
byte-compiling C:\Python26\lib\encodings\cp852.py to encodings\cp852.pyc 
byte-compiling C:\Python26\lib\encodings\cp855.py to encodings\cp855.pyc 
byte-compiling C:\Python26\lib\encodings\cp856.py to encodings\cp856.pyc 
byte-compiling C:\Python26\lib\encodings\cp857.py to encodings\cp857.pyc 
byte-compiling C:\Python26\lib\encodings\cp860.py to encodings\cp860.pyc 
byte-compiling C:\Python26\lib\encodings\cp861.py to encodings\cp861.pyc 
byte-compiling C:\Python26\lib\encodings\cp862.py to encodings\cp862.pyc 
byte-compiling C:\Python26\lib\encodings\cp863.py to encodings\cp863.pyc 
byte-compiling C:\Python26\lib\encodings\cp864.py to encodings\cp864.pyc 
byte-compiling C:\Python26\lib\encodings\cp865.py to encodings\cp865.pyc 
byte-compiling C:\Python26\lib\encodings\cp866.py to encodings\cp866.pyc 
byte-compiling C:\Python26\lib\encodings\cp869.py to encodings\cp869.pyc 
byte-compiling C:\Python26\lib\encodings\cp874.py to encodings\cp874.pyc 
byte-compiling C:\Python26\lib\encodings\cp875.py to encodings\cp875.pyc 
byte-compiling C:\Python26\lib\encodings\cp932.py to encodings\cp932.pyc 
byte-compiling C:\Python26\lib\encodings\cp949.py to encodings\cp949.pyc 
byte-compiling C:\Python26\lib\encodings\cp950.py to encodings\cp950.pyc 
byte-compiling C:\Python26\lib\encodings\euc_jis_2004.py to encodings\euc_jis_20 
04.pyc 
byte-compiling C:\Python26\lib\encodings\euc_jisx0213.py to encodings\euc_jisx02 
13.pyc 
byte-compiling C:\Python26\lib\encodings\euc_jp.py to encodings\euc_jp.pyc 
byte-compiling C:\Python26\lib\encodings\euc_kr.py to encodings\euc_kr.pyc 
byte-compiling C:\Python26\lib\encodings\gb18030.py to encodings\gb18030.pyc 
byte-compiling C:\Python26\lib\encodings\gb2312.py to encodings\gb2312.pyc 
byte-compiling C:\Python26\lib\encodings\gbk.py to encodings\gbk.pyc 
byte-compiling C:\Python26\lib\encodings\hex_codec.py to encodings\hex_codec.pyc 

byte-compiling C:\Python26\lib\encodings\hp_roman8.py to encodings\hp_roman8.pyc 

byte-compiling C:\Python26\lib\encodings\hz.py to encodings\hz.pyc 
byte-compiling C:\Python26\lib\encodings\idna.py to encodings\idna.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp.py to encodings\iso2022_jp.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp_1.py to encodings\iso2022_jp 
_1.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp_2.py to encodings\iso2022_jp 
_2.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp_2004.py to encodings\iso2022 
_jp_2004.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp_3.py to encodings\iso2022_jp 
_3.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_jp_ext.py to encodings\iso2022_ 
jp_ext.pyc 
byte-compiling C:\Python26\lib\encodings\iso2022_kr.py to encodings\iso2022_kr.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_1.py to encodings\iso8859_1.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_10.py to encodings\iso8859_10.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_11.py to encodings\iso8859_11.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_13.py to encodings\iso8859_13.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_14.py to encodings\iso8859_14.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_15.py to encodings\iso8859_15.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_16.py to encodings\iso8859_16.p 
yc 
byte-compiling C:\Python26\lib\encodings\iso8859_2.py to encodings\iso8859_2.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_3.py to encodings\iso8859_3.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_4.py to encodings\iso8859_4.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_5.py to encodings\iso8859_5.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_6.py to encodings\iso8859_6.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_7.py to encodings\iso8859_7.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_8.py to encodings\iso8859_8.pyc 

byte-compiling C:\Python26\lib\encodings\iso8859_9.py to encodings\iso8859_9.pyc 

byte-compiling C:\Python26\lib\encodings\johab.py to encodings\johab.pyc 
byte-compiling C:\Python26\lib\encodings\koi8_r.py to encodings\koi8_r.pyc 
byte-compiling C:\Python26\lib\encodings\koi8_u.py to encodings\koi8_u.pyc 
byte-compiling C:\Python26\lib\encodings\latin_1.py to encodings\latin_1.pyc 
byte-compiling C:\Python26\lib\encodings\mac_arabic.py to encodings\mac_arabic.p 
yc 
byte-compiling C:\Python26\lib\encodings\mac_centeuro.py to encodings\mac_centeu 
ro.pyc 
byte-compiling C:\Python26\lib\encodings\mac_croatian.py to encodings\mac_croati 
an.pyc 
byte-compiling C:\Python26\lib\encodings\mac_cyrillic.py to encodings\mac_cyrill 
ic.pyc 
byte-compiling C:\Python26\lib\encodings\mac_farsi.py to encodings\mac_farsi.pyc 

byte-compiling C:\Python26\lib\encodings\mac_greek.py to encodings\mac_greek.pyc 

byte-compiling C:\Python26\lib\encodings\mac_iceland.py to encodings\mac_iceland 
.pyc 
byte-compiling C:\Python26\lib\encodings\mac_latin2.py to encodings\mac_latin2.p 
yc 
byte-compiling C:\Python26\lib\encodings\mac_roman.py to encodings\mac_roman.pyc 

byte-compiling C:\Python26\lib\encodings\mac_romanian.py to encodings\mac_romani 
an.pyc 
byte-compiling C:\Python26\lib\encodings\mac_turkish.py to encodings\mac_turkish 
.pyc 
byte-compiling C:\Python26\lib\encodings\mbcs.py to encodings\mbcs.pyc 
byte-compiling C:\Python26\lib\encodings\palmos.py to encodings\palmos.pyc 
byte-compiling C:\Python26\lib\encodings\ptcp154.py to encodings\ptcp154.pyc 
byte-compiling C:\Python26\lib\encodings\punycode.py to encodings\punycode.pyc 
byte-compiling C:\Python26\lib\encodings\quopri_codec.py to encodings\quopri_cod 
ec.pyc 
byte-compiling C:\Python26\lib\encodings\raw_unicode_escape.py to encodings\raw_ 
unicode_escape.pyc 
byte-compiling C:\Python26\lib\encodings\rot_13.py to encodings\rot_13.pyc 
byte-compiling C:\Python26\lib\encodings\shift_jis.py to encodings\shift_jis.pyc 

byte-compiling C:\Python26\lib\encodings\shift_jis_2004.py to encodings\shift_ji 
s_2004.pyc 
byte-compiling C:\Python26\lib\encodings\shift_jisx0213.py to encodings\shift_ji 
sx0213.pyc 
byte-compiling C:\Python26\lib\encodings\string_escape.py to encodings\string_es 
cape.pyc 
byte-compiling C:\Python26\lib\encodings\tis_620.py to encodings\tis_620.pyc 
byte-compiling C:\Python26\lib\encodings\undefined.py to encodings\undefined.pyc 

byte-compiling C:\Python26\lib\encodings\unicode_escape.py to encodings\unicode_ 
escape.pyc 
byte-compiling C:\Python26\lib\encodings\unicode_internal.py to encodings\unicod 
e_internal.pyc 
byte-compiling C:\Python26\lib\encodings\utf_16.py to encodings\utf_16.pyc 
byte-compiling C:\Python26\lib\encodings\utf_16_be.py to encodings\utf_16_be.pyc 

byte-compiling C:\Python26\lib\encodings\utf_16_le.py to encodings\utf_16_le.pyc 

byte-compiling C:\Python26\lib\encodings\utf_32.py to encodings\utf_32.pyc 
byte-compiling C:\Python26\lib\encodings\utf_32_be.py to encodings\utf_32_be.pyc 

byte-compiling C:\Python26\lib\encodings\utf_32_le.py to encodings\utf_32_le.pyc 

byte-compiling C:\Python26\lib\encodings\utf_7.py to encodings\utf_7.pyc 
byte-compiling C:\Python26\lib\encodings\utf_8.py to encodings\utf_8.pyc 
byte-compiling C:\Python26\lib\encodings\utf_8_sig.py to encodings\utf_8_sig.pyc 

byte-compiling C:\Python26\lib\encodings\uu_codec.py to encodings\uu_codec.pyc 
byte-compiling C:\Python26\lib\encodings\zlib_codec.py to encodings\zlib_codec.p 
yc 
byte-compiling C:\Python26\lib\functools.py to functools.pyc 
byte-compiling C:\Python26\lib\genericpath.py to genericpath.pyc 
byte-compiling C:\Python26\lib\getopt.py to getopt.pyc 
byte-compiling C:\Python26\lib\gettext.py to gettext.pyc 
byte-compiling C:\Python26\lib\heapq.py to heapq.pyc 
byte-compiling C:\Python26\lib\inspect.py to inspect.pyc 
byte-compiling C:\Python26\lib\keyword.py to keyword.pyc 
byte-compiling C:\Python26\lib\linecache.py to linecache.pyc 
byte-compiling C:\Python26\lib\locale.py to locale.pyc 
byte-compiling C:\Python26\lib\ntpath.py to ntpath.pyc 
byte-compiling C:\Python26\lib\numbers.py to numbers.pyc 
byte-compiling C:\Python26\lib\opcode.py to opcode.pyc 
byte-compiling C:\Python26\lib\optparse.py to optparse.pyc 
byte-compiling C:\Python26\lib\os.py to os.pyc 
byte-compiling C:\Python26\lib\os2emxpath.py to os2emxpath.pyc 
byte-compiling C:\Python26\lib\pdb.py to pdb.pyc 
byte-compiling C:\Python26\lib\pickle.py to pickle.pyc 
byte-compiling C:\Python26\lib\posixpath.py to posixpath.pyc 
byte-compiling C:\Python26\lib\pprint.py to pprint.pyc 
byte-compiling C:\Python26\lib\quopri.py to quopri.pyc 
byte-compiling C:\Python26\lib\random.py to random.pyc 
byte-compiling C:\Python26\lib\re.py to re.pyc 
byte-compiling C:\Python26\lib\repr.py to repr.pyc 
byte-compiling C:\Python26\lib\shlex.py to shlex.pyc 
byte-compiling C:\Python26\lib\site-packages\zipextimporter.py to zipextimporter 
.pyc 
byte-compiling C:\Python26\lib\sre.py to sre.pyc 
byte-compiling C:\Python26\lib\sre_compile.py to sre_compile.pyc 
byte-compiling C:\Python26\lib\sre_constants.py to sre_constants.pyc 
byte-compiling C:\Python26\lib\sre_parse.py to sre_parse.pyc 
byte-compiling C:\Python26\lib\stat.py to stat.pyc 
byte-compiling C:\Python26\lib\string.py to string.pyc 
byte-compiling C:\Python26\lib\stringprep.py to stringprep.pyc 
byte-compiling C:\Python26\lib\struct.py to struct.pyc 
byte-compiling C:\Python26\lib\subprocess.py to subprocess.pyc 
byte-compiling C:\Python26\lib\tempfile.py to tempfile.pyc 
byte-compiling C:\Python26\lib\textwrap.py to textwrap.pyc 
byte-compiling C:\Python26\lib\threading.py to threading.pyc 
byte-compiling C:\Python26\lib\token.py to token.pyc 
byte-compiling C:\Python26\lib\tokenize.py to tokenize.pyc 
byte-compiling C:\Python26\lib\traceback.py to traceback.pyc 
byte-compiling C:\Python26\lib\types.py to types.pyc 
byte-compiling C:\Python26\lib\unittest.py to unittest.pyc 
byte-compiling C:\Python26\lib\warnings.py to warnings.pyc 
*** copy extensions *** 
copying C:\Python26\DLLs\bz2.pyd -> C:\Python26\working\build\bdist.win32\winexe 
\collect-2.6 
copying C:\Python26\DLLs\select.pyd -> C:\Python26\working\build\bdist.win32\win 
exe\collect-2.6 
copying C:\Python26\DLLs\unicodedata.pyd -> C:\Python26\working\build\bdist.win3 
2\winexe\collect-2.6 
copying C:\Python26\lib\site-packages\cx_Oracle.pyd -> C:\Python26\working\build 
\bdist.win32\winexe\collect-2.6 
*** copy dlls *** 
copying C:\Oracle\XEClient\bin\OCI.dll -> C:\Python26\working\build\bdist.win32\ 
winexe\collect-2.6 
copying C:\Python26\lib\site-packages\py2exe\run.exe -> C:\Python26\working\dist 
\testora.exe 

*** binary dependencies *** 
Your executable(s) also depend on these dlls which are not included, 
you may or may not need to distribute them. 

Make sure you have the license if you distribute any of them, and 
make sure you don't distribute files belonging to the operating system. 

    USER32.dll - C:\WINDOWS\system32\USER32.dll 
    SHELL32.dll - C:\WINDOWS\system32\SHELL32.dll 
    WSOCK32.dll - C:\WINDOWS\system32\WSOCK32.dll 
    ADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dll 
    msvcrt.dll - C:\WINDOWS\system32\msvcrt.dll 
    KERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dll 

C:\Python26\working\dist>testora 
Traceback (most recent call last): 
    File "testora.py", line 19, in <module> 
    File "testora.py", line 11, in testora 
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle 

答えて

8

py2exeでビルドしたときにOCI.dllを除外していることを確認しましたか?マシン上のDLLのバージョンが、別のマシンのクライアントバージョンと互換性がない場合(私は11gのクライアントを試してみたが、マシン上で10gを試してみた)、この設定は機能しませんしかし)。今後の参考のため

+0

それは働きました!とても簡単!感謝のヒープ、私は長い間、壁に頭を打つのではなく、今の前に尋ねたはずです... :) –

2

改訂build_testora.py、:

from distutils.core import setup 
import py2exe, sys 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe': { 
     'bundle_files': 2, 
     'compressed': True, 
     'dll_excludes': ["oci.dll"] 
     }}, 
    console = [{'script': "testora.py"}], 
    zipfile = None 
    ) 
+0

私はOracleXEClient、instantclient_10_2またはinstantclient_11_1を使用するかどうかは今、正常に動作します。 –

関連する問題