12

64 ビット マシンで Windows 7 を使用しているため、Spatialite ベータ バージョン 3.0 を使用しようとしています。

ロードしようとすると、常に恐ろしいsqlite3.OperationalError: The specified module could not be found.エラーが発生します libspatialite-4.dll

私は次のことを試しました:

  • libspatialite-4.dllおよび他のすべてのdllを同じフォルダーに入れます
  • dll へのフル パスを使用する
  • dll の場所を'PATH'環境変数に追加します。
  • Python コードの一部として sys.path 属性に dll の場所を追加します。
  • フォルダ内のすべてのdllをコピーしc:\windows\system32ます(マシンの再起動で完了)
  • フォルダー内のすべてのdllをコピーしc:\windows\sysWoW64ます(マシンの再起動で完了します。これは32ビットdll用であるはずですが、とにかく試しました)

私のコードは次のとおりです。

import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-4.dll")')

注 - 私もフルパスを試してみましたが、うまくいきませんでした。Windows XP 32 ビットで同じ問題が発生したことを覚えています。私はそれを機能させましたが、私が何をしたか思い出せません:(

アップデート

32 ビットの Windows 7 でセットアップをテストしたところ、すべての dll を System32 フォルダーに配置することができました。したがって、これは 64 ビット セットアップに何らかの問題があることを示唆しています。別のバージョンの MSVC が必要なのでしょうか (Spatialite の Web サイトにはどちらが必要かは記載されていないので、推測する必要があるかもしれません - MSVC2010 がインストールされています)。

4

4 に答える 4

2

私は同じ問題を抱えていて、何日も混乱していました。Windows 7 (x64) で Python 2.6 (32 ビット) を実行しているため、設定が異なる場合があります。

試すことができるものは次のとおりです(このGoogleグループの投稿から取得):

  1. Spatialite DLL (libgeos_c-1.dll、libgeos-3-0-0.dll、libproj-0.dll、および libspatialite-2.dll) を C:/ ドライブのフォルダーに配置します。
  2. このフォルダーを PATH に追加します。

問題は、ユーザー権限の設定により、Windows が C:\Windows\system32 から dll を読み込めない可能性があることです。

于 2012-06-08T21:11:19.330 に答える
2

Pythonに含まれている のバージョンはsqlite3.dll、Spatialite とうまく連携したくないようです。私が仕事に取り掛かることができた唯一のこと(ソースからすべてをコンパイルすることを除いて)は次のとおりでした:

  1. SQLite (またはcyqlite - R-Tree などのいくつかの便利な機能を有効にした Windows 用 SQLite の再コンパイルで、空間インデックスを実行できるようにする) をダウンロードします。sqlite-dll-win32-x86-[version].zip
  2. mod_spatialiteをダウンロードします(Windows バイナリはページ下部のピンク色のボックスにあります)。mod_spatialite-[version]-win-x86.7z
  3. 最初に SQLite/cyqlite 、次に mod_spatialite同じフォルダーに解凍します(競合がある場合は上書きします)。
  4. このフォルダをシステム パスに追加します
  5. sqlite3.dllPython DLLs ディレクトリにある の名前を のような名前に変更してsqlite3_old.dll、Python がパス上で新しいものを使用するようにします。

詳細については、このブログ投稿を参照してください。

于 2015-11-12T08:50:31.230 に答える
1

私はつい最近、pyspatialite 3.0.1 とそれに依存するすべてのライブラリの x64 ビルドという悪夢に見舞われました。それを行うことはできますが、正しく行うには「微調整」が必要です。

最初に、spatialite.c アマルガムをコンパイルするために必要になる可能性がある回避策をここでメモします。

Pyspatialite 3.0.1 問題 #7 コメント #3

次に、Python 2.7 x64 がコンパイルされている MSVC 2008 / SDK 7.0 x64 でコンパイルすることをお勧めします。依存ライブラリを mingw-w64 でコンパイルしたときに、正しくコンパイルしようとしてかなりのトラブルに遭遇しました。

iconv (v. 1.9.2) と proj4 (v. 4.8.0) はどちらも問題なくコンパイルおよびインストールできるようです。ただし、最新の GEOS svn_trunk (v. 3.3.5) を使用すると、問題が発生する場合があります。回避策/修正については、次のリンクに注意してください...

OSGEO GEOS TRAC チケット #574

OSGEO GEOS TRAC チケット #577

577 から 2 つの makefile をダウンロードすると、574 に修正が含まれています。

また、毎晩のスナップショットの 1 つをダウンロードし、コンパイルする前に geos/src/triangulate ディレクトリをビルド フォルダーにコピーする必要があります。

最後に、geos/src/dirlist.mk を少し変更します。

45 行目で、'simplify \' のすぐ下、'util' の上に 'triangulate \' (引用符なし) を追加します。

コンパイルすると、いくつかの警告が表示される場合がありますが、ビルドが完全に失敗することはありません...

nmake /f makefile.vc PREFIX=../Path/To/Geos/Install/Here

nmake install /f makefile.vc PREFIX=../Path/To/Geos/Install/Here

これにより、lib の依存関係が処理されます。1.pyspatialite ビルド フォルダーに setup.cfg ファイルを作成し、/bin、/lib、および /include パスを追加するか、または 2.pyspatialite setup.py ファイルを直接編集し、同じことをする。

setup.py ファイルを直接編集し、依存関係ライブラリへのパスを次のように追加するのが最も簡単であることがわかりました。

(line 45) include_dirs = ['../usr/local/include', '../python27/include']

(line 46) library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs']

(line 47) libraries = ['geos','geos_c','proj','iconv'] # You may need to add 'iconv' here

(line 48) runtime_library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs']

これらの変更を行った後も pyspatialite がビルドに失敗する場合は、setup.py にもう 1 セットの変更を加えます。121 行目あたりに次の行を追加します...

ext.include_dirs.append('../python27/include') 
ext.include_dirs.append('../usr/local/include') 

ext.library_dirs.append('../python27/libs')
ext.library_dirs.append('../usr/local/lib')

ext.library_dirs.append('../python27/DLLs')
ext.library_dirs.append('../usr/local/bin')

特定の設定に合わせてパスを置き換えることを忘れないでください。それはそれを行う必要があります。「python setup.py install」を実行すると、すべてが機能するはずです。

../Python27/Lib/site-packages/pyspatialite/test ですべてのテストを実行できます - それらはすべて合格しました。ただし、より適切で現実的なテストは、このリンクからサンプル コードを実行することです。

SpatiaLite と Python

ただし、著者が行っている手順では、x64 ビット環境で動作する依存ライブラリを取得するための詳細は説明されていません。また、pyspatialite 3.0.1 が適切なバージョンの Spatialite 融合を自動的に検出するようになったため、それらが特に役立つとは思いませんでした。ダウンロードする。このサイトのサンプル コードは、spatialite データベース ファイルを作成し、そこに何千ものエントリを入力します。すべてがうまくいきました。したがって、pyspatialite x64 ビルドを取得するための上記の方法が機能すると思います。

幸運を!

-RMWカオス

于 2012-07-31T16:00:59.937 に答える
0

ここの最後の投稿の指示に従って、これを解決しました。私のシステムは、上記のいくつかのように、32ビットのspatialiteライブラリとpython用のpysqliteライブラリを備えたWin7 64ビットでした。DLL ディレクトリの sqlite3.dll にリンクしました (これは ArcGIS がインストールする Python であり、他のインストールとは少し異なります)。

これにより、pysqlite を介して Spatialite 4 dll をロードする際の問題が解決されました。

于 2013-04-26T17:26:31.723 に答える