我python程序(Python2.6)的工作现在我运行,它使用的蟒蛇解释,它连接到Oracle数据库(10g XE)没有错误。然而,当我汇编使用py2exe,可执行的版本将失败的"无法获取Oracle环境下处理"在电话给您.connect().

我已经尝试过的以下有没有喜悦:

  • Oracle即时客户10g和11g
  • Oracle XE客户
  • 重新安装您-5.0.2开始-10g。win32-py2.6.msi
  • 设置 ORACLE_HOME 以及路径
  • 另一个计算机仅仅是一个Oracle的客户和exe
  • 各种选项对于建设exe(没有压缩和/或使用拉链文件)

我的测试用例:

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
    )

结果:

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
有帮助吗?

解决方案

你一定要排除的OCI.dll 当你建立与py2exe?如果版本的错误你的机器是不符合客户的版本,另一台机器上你的测试(我注意到你尝试了一11g客户,但10g你的机器上),那么这种配置不会的工作(我忘了实际的错误消息,虽然).

其他提示

订正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
    )
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top