My python program (Python 2.6) works fine when I run it using the Python interpreter, it connects to the Oracle database (10g XE) without errors. However, when I compile it with py2exe, the executable version crashes with "Unable to retrieve the Oracle environment descriptor" when calling cx_Oracle.connect ().
I tried the following without joy:
- Oracle 10g and 11g instant client
- Oracle XE Client
- reinstall cx_Oracle-5.0.2-10g.win32-py2.6.msi
ORACLE_HOME as well as PATH- another computer with only Oracle and exe client
- various options for building exe (without compression and / or using a zip file)
My test file:
testora.py:
import cx_Oracle import decimal # needed for py2exe to compile this correctly def testora(): """testora >>> testora.testora() <cx_Oracle.Connection to scott@localhost :1521/orcl> X """ orcl = cx_Oracle.connect('scott/ tiger@localhost :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 )
Results:
C:\Python26\working>python testora.py <cx_Oracle.Connection to scott@localhost :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
python oracle py2exe cx-oracle
Jeffrey kemp
source share