ImportError DLL加载失败,但在命令行导入工作

时间:2012-10-08 12:53:42

标签: python windows dll import

我正在尝试让一个python程序在Windows机器上运行。 我把它放在我的开发窗口框上,但是当我将它转移到另一个窗口框时,我一直得到:

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

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

如果我在那个盒子上,如果输入翻译并输入“import arcgisscripting”,我没有错误(只是一个新的>>>光标),所以我开始认为这个错误有点误导。如果(例如)python代码编译为64位并且您尝试在32位python上运行,我会读到这个错误。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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"