0

Windowsボックスでpythonプログラムを実行しようとしています。開発用の Windows ボックスで実行していますが、別の 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. すべてのコンポーネントが同じ OS ベース (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 に答える