0

我正在尝试让 python 程序在 Windows 盒子上运行。我让它在我的开发窗口盒子上运行,但是当我将它转移到另一个窗口盒子时,我不断得到:

ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序

跟踪表明它在导入时遇到了问题,它基本上会通过几个内部 python 程序(相互导入),然后进入 ArcPy 领域。最终,它似乎尝试过的最后一个是 arcgisscripting。

当我在那个框中输入解释器并输入“import arcgisscripting”时,我没有收到任何错误(只是一个新的 >>> 光标),所以我开始认为这个错误有点误导。如果(例如)python 代码编译为 64 位并且您尝试在 32 位 python 上运行,我会读到此错误通常会出现。

一位同事建议,如果python找不到一些必要的代码,有时会发生错误。所以我检查并做了 SET 语句,现在 PATH 和 PYTHONPATH 变量似乎是等价的。我仍然收到此错误,不知道该怎么办。我宁愿不必做诸如卸载问题框上的东西并重新安装之类的事情。该框是共享资源。

4

2 回答 2

0

终于找到了。arcgisscripting 的 .pyd 文件(基本上是特定于 python 的 .dll)位于 C:\Program Files (x86)\ArcGIS\Desktop10.1\bin\arcgisscripting.pyd

如果我将 DependencyWalker 指向该文件,则表明找不到该文件的多个依赖项。

所以似乎解决方案是:1)找到 ImportError 标记的最后一个文件 2)在文件系统上查找其 .pyd 文件 3)在该 .pyd 上运行 DependencyWalker 以找出丢失的内容

于 2012-10-09T18:09:32.377 回答
0

我最近从经历同样的痛苦中学到了一些教训。

首先要运行几项检查。

  1. 检查所有组件是否在相同的操作系统基础上运行,64 位或 32 位。如果您的机器是 64 位安装,请确保您有 64 位版本的 python。Oracle Instant Client 的安装也是如此;如果您的机器正在运行它,它也需要是 64 位的。

  2. 如果你想让exe真正独立于软件,你将不得不打包oracle即时客户端并设置系统路径变量。

  3. 我用过的最简单的运行方式是 py_installer,它开箱即用,运行良好,但我仍在努力包含即时客户端安装程序。

  4. 在导入 cx_oracle 之前设置这些系统路径

    # instantClientPath is the path to the instant client folder
    os.environ["PATH"] = instantClientPath+";"+os.environ["PATH"] 
    os.environ["ORACLE_HOME"] = instantClientPath 
    os.environ["LD_LIBRARY_PATH"] = instantClientPath 
    os.environ["TNS_ADMIN"] = instantClientPath 
    os.environ["NLS_LANG"] = "american_america.WE8MSWIN1252"
    
于 2014-12-10T18:20:06.287 回答