2009-07-20 19 views
6

Python yorumlayıcısını kullanarak çalıştırdığım python programım (Python 2.6) düzgün çalışıyor, Oracle veritabanına (10g XE) hatasız bağlanıyor . Ancak, py2exe kullanarak derlediğimizde, çalıştırılabilir sürümü cx_Oracle.connect() çağrısında "Oracle ortam tanıtıcısı alınamıyor" ile başarısız oluyor.Oracle'a py2exe'd programından bağlanma hatası: Oracle ortam tanıtıcısı alınamadı

hiçbir sevinçle aşağıdaki denedim:

  • Oracle anlık istemci 10g ve 11g
  • Oracle XE Client
  • cx_Oracle-5.0.2-10g.win32-py2.6 yeniden yükleyin. msi
  • PATH yanı sıra ORACLE_HOME ayarı
  • yapım makine için sadece Oracle müşterinin exe
  • çeşitli seçeneklerle başka bir bilgisayar exe (hayır sıkıştırma ve/veya kullanarak zip dosyasını) ng

Benim dizge:

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 
    ) 

Sonuçlar:

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 

cevap

8

Py2exe ile oluşturduğunuzda OCI.dll'yi hariç tuttuğunuzdan emin misiniz? Makinenizdeki DLL sürümü, üzerinde çalıştığınız başka bir makinedeki istemci sürümüyle uyumsuzsa, (makinenizde bir 11g istemcisi ancak 10g denediğinizi fark ettim), bu yapılandırma çalışmayacaktır (gerçek hata iletisini unutuyorum) gerçi). İleride başvurmak için

+0

İşe yaradı! Çok basit! Teşekkürler yığınlar, bu gün önce kafamı duvara uzun süre vurmak yerine sormam gerekirdi ... :) –

2

Revize 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 veya instantclient_11_1 kullanıyorum. –

İlgili konular