試行錯誤、Google 検索、壊れたキーボード、さまざまなフォーラム / チャット Q&A セッション、および頭部外傷 (いくつかの問題に対する独自の修正 / 回避策を作成する必要があることは言うまでもありません) の後、最終的にビルドに成功しました。 Windows x64 用の 64 ビット バージョンの PySpatiaLite 3.0.1 をインストールします。ウーフー!
エンドポイント (数週間!) にたどり着くのがいかに難しかったかを考えると、「64 ビット バージョンの PySpatiaLite をビルドしてインストールするにはどうすればよいですか?」という特定の質問への回答として、このチュートリアルを共有したいと思いました。ウィンドウズ?" 新しい自問自答式の質問スレッドを作成するよりも、Windows に PySpatiaLite をインストールする方法に関するこの質問に回答する方がよいと考えました。だからここに行きます...
注:このサイトでの Markdown の仕組みでは、リストの番号付けスキーマを完全に制御することはできません。各ヘッダーの後に 1 にリセットされます。元のチュートリアルでは何かに 30 の番号を付けたかもしれませんが、ここでは Building xyz などのステップ 5 として表示されることに注意する必要がありました。何ができますか?
ハウツー: Windows に 64 ビット PYSPATIALITE をインストールする
40 の非常に簡単に実行できる手順- いいえ、そうではありません。
ここには非常に多くのステップがありますが、それは可能な限り最小のコンポーネントに分解したからです。圧倒されないように。大まかに言うと、実際に行っていることは次の 5 つだけです。
- 必要なソースをすべてダウンロードする
- ビルド環境のセットアップ (いずれにせよ、すでにこれを行っている可能性があります)
- 依存ライブラリのビルドとインストール
- PySpatiaLite のビルドとインストール
- インストールのテスト
それでおしまい。それほど難しくありませんよね?そうそうでした!! しかし、うまくいけば、これらの手順に従うことはそれほど難しくありません. 多くの人にとって、これらの手順に追加された詳細は、特に以前にソース コードからビルドしたことがある場合はやり過ぎのように思えるかもしれませんが (実際にはそうではありませんでした!)、読者のスキル レベルや専門知識については想定していません。 ; したがって、このハウツーは比較的初心者 (私のような!) が従うことができるように書かれています。
注:このドキュメント全体の注記に注意してください。これらの注記では、一見しただけでは明らかではない落とし穴や事柄が指摘されていることがよくあります。
注:ベータ版やナイトリー スナップショットではなく、可能な場合は常に最新の安定版リリース バージョンを使用してください。場合によっては、最先端のベータ リリース (または、知り合いであればアルファ版) を取得する以外に選択肢がないこともあります。たとえば、GEOS の最新の安定版リリースと、問題を回避するためのナイトリー ビルドの両方が必要になります。
注:以下のリンクのいくつかに移動すると、構築する予定の他のライブラリのコンパイル済みバイナリがいくつかあることに気付くかもしれません。これらを使用しないことを強くお勧めします。それらが組み込まれた環境を確信することはできません。独自の環境でそれらを構築した場合、物事が適切に機能することがより良く/安全/確実になります。Gettext であることの例外。
ME:比較基準としての「My Environment」の略
要件:
Microsoft Windows x64 OS (何をしているの?)
ME: MS Windows 7 Home x64
MS Visual Studio Express C++ (MSVC) 2008
ME:
Webベースのインストーラーを使用するのではなく、仮想 ISO イメージをダウンロードしてマウントしました。余分な「s」? 彼らはそれをもう少し明白にするだろうと思いますよね?MSVC の完全版も同じように機能しますが、私と同じように、無料はあなたにとって大きな価値があると思います。
注: MSVC 2010 で動作する可能性がありますが、Python がコンパイルされたのと同じバージョンを使用することを強くお勧めします。これは、少し厄介な場合があるためです。そのため、mingw-w64 や Cygwin ではなく MSVC でビルドすることをお勧めします。
MS ソフトウェア開発キット (SDK) 7.0 amd64 .NET Framework 3.5
ME: ISO イメージもここからダウンロードします。
注: SDK 7.1 amd64 .NET Framework 4.0 (MSVC 2010) で動作する可能性がありますが、上記の注を参照してください
Python 2.7 x64
ME: Python 2.7.3 x64 (コンパイル済みの Win x64 インストール)
注:バージョン 2.5 以降 (3.x を含む) で動作する可能性があります 。
最新の GNU iconv ソース コード
ME: libiconv 1.9.2
最新の Proj.4 ソース コード
ME: libproj 4.8.0
最新の GEOS ソース コード
ME: libgeos 3.3.5 (svn_trunk) + 2012-07-28 夜間スナップショット
注:このページから夜間スナップショットの 1 つもダウンロードしてください。そこから不足しているディレクトリをコピーする必要がありますが、ライブラリ自体を構築するためにそれを使用したくありません。
最新の GNU Gettext ランタイムバイナリ
ME: Gettext 0.18.1.1-2注
:ここでは、iconv との循環依存のため、ソース コードからビルドする代わりにバイナリを使用します。あなたはそれを回避することができますが、これはより簡単で、より速く、より簡単で、ストレスを誘発しません.
最新の PySpatialLite パッケージ
ME: PySpatiaLite 3.0.1
注:この記事の執筆時点では、3.0.1 が利用可能な最新バージョンです。このバージョンを機能させるための特定の癖は、おそらく他のバージョンとすべて一致するとは限りませんが、依存ライブラリをコンパイルするために必要な手順の多くは引き続き適用されます。
Notepad++またはその他のフル機能のエディター アプリ。
注:確かに、MS NotePad でピンチが発生することはありますが、このプロセスは非常に困難になります。もう少し堅牢なものをお勧めしますが、Notepad++ がたまたま私のお気に入りです。
ビルド環境のセットアップ:
MSVC 2008 をインストールし、Windows Update を実行して (すべてを取得するために 2 回以上実行する場合もあります)、更新プログラムが残っていない場合は...
SDK 7.0 をインストールし、Windows Updateを再度実行して(そして何度も何度も何度も何度も何度も)、更新プログラムが残っていない場合は...
Windows フォルダー (または Windows エクスプローラー) を開き、「C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC」に移動します。
「vcvarsall.bat」を編集
示されている行番号で、次のようなコードを見つけます。
Line 19: if not exist "%~dp0bin\amd64\vcvarsamd64.bat" goto missing
Line 20: call "%~dp0bin\amd64\vcvarsamd64.bat"
これらの行のパスは単純に間違っています。理由を聞かないでください。その日、Microsoft は頭を抱えていたと思いますが、「\amd64」を削除して、各行のファイル名を「vcvars64.bat」に変更するだけで問題ありません。最終結果は次のようになります。
Line 19: if not exist "%~dp0bin\vcvars64.bat" goto missing
Line 20: call "%~dp0bin\vcvars64.bat"
注:コマンド ウィンドウを開き (START --> RUN --> type 'cmd' --> OK)、次のコマンドを実行してテストできます。
c:\> vcvarsall x64
「Microsoft Visual Studio 2008 x64 ツールを使用するための環境を設定しています」という一連の出力が表示されるはずです。このウィンドウを閉じてください。
次に、SDK 7.0 環境をテストしましょう。[スタート] --> [すべてのプログラム] --> [Microsoft Windows SDK 7.0] --> [CMD Shell] をクリックします。すべてが正常に機能している場合は、コマンド ライン ウィンドウに
黄色のテキストが表示されます。これは 64 ビット環境を示します。完全!ここでは、このウィンドウを閉じることができます。
注: SDK 7.0 CMD シェルへのショートカットを作成することをお勧めします。このプロセスでは頻繁に使用します。
依存関係ライブラリを最終的にインストールする場所を決定します。フォルダがまだ存在しない場合は、ここで作成してください。選択したパスを覚えておいてください。頻繁に参照します。簡単にするために、サンプル コードではこれを「\Install」または場合によっては「C:\Install」と呼びます。
このインストール プロセス中に一時ビルド ファイルを保持する場所を決定します。これは
、'\Install' フォルダーと同じ場所であってはなりません。サンプル コードでは、これを「\Temp」または「C:\Temp」と呼びます。
GNU Gettext バイナリを「\Temp」に抽出します。これにより、「\Temp\Gettext-0.18.1.1-2」などの名前のフォルダーが作成されます。
libintl.dll を '\Temp\Gettext-0.18.1.1-2\bin' から '\Install\bin' にコピーするか ('\bin' を自分で作成する必要があります)、すべての Gettext をコピーして貼り付けます (' \bin'、''\lib' など) サブフォルダを '\Install' に入れます。どちらの方法でも問題なく動作します。
「\Install\bin」に移動し、「libintl.dll」のコピーを作成して「intl.dll」と名付けます。これは、別の名前で検索する一部のライブラリに必要です。これで、ライブラリのビルドに進む準備が整いました...
依存関係ライブラリの構築:
- 各ライブラリ (Proj.4、GEOS、および iconv) を「\Temp」内の独自のフォルダーに抽出します。'\Temp\Proj-4.8.0' (またはそれ以上!) を何度も何度も入力するのは面倒なので、各フォルダの名前を短くてわかりやすいもの (例: '\Temp\Proj4') に変更することをお勧めします。
建物のiconv:
SDK CMD シェルを開き、ディレクトリを iconv フォルダー (例: 'cd c:\temp\iconv') に変更します。
次の 2 つのコマンドのいずれかを入力します。
Single-threaded static lib: (recommended)
c:\Temp\iconv\> nmake install /f makefile.msvc MFLAGS=-ML PREFIX=c:\Install
Multi-threaded static lib: (so far it's working for me)
c:\Temp\iconv\> nmake install /f makefile.msvc MFLAGS=-MT PREFIX=c:\Install
「c:\Install」を「\Install」パスに置き換えます。難解な c スタイルのリンクなどを長時間実行した後、プロセスは最終的に完了し、ビルド プロセスを中断させるエラー (たとえば、「cl.exe exited with status 2」) が表示されないと仮定すると、無視しても比較的安全です。多数の警告 - 先に進む準備ができました。
注:必要に応じて、「nmake」の直後に「install」をドロップして、その後上記のようにコマンドを再実行することにより、2 つの別々のステップでライブラリをビルドおよびインストールできますが、ポイントは何ですか? ビルド部分が失敗した場合、とにかくインストールされません。
プロジェクト 4 の構築:
引き続き CMD シェルで、ディレクトリを '\Temp\Proj4' フォルダーに変更します (例: 'cd c:\temp\proj4')。
次のコマンドを入力します。
c:\Temp\proj4\> nmake install-all /f makefile.vc INSTDIR=c:\Install
「c:\Install」を「\Install」パスに置き換えます。
注:ここでのメイクファイルの拡張子は、'.msvc' ではなく '.vc' になりました。どちらかが一般的な方法のようです。
注:ここでは、'nmake install ...' よりも一般的な 'nmake install-all ...' であることに注意してください。
注:これは、'PREFIX=' ではなく 'INSTDIR=' の使用を確認した唯一の例です。それ自体は間違っていませんが、私が最も頻繁に使用されている標準的な規則ではありません。
「指定されたファイルが見つかりません。0 個のファイルがコピーされました。インストール スクリプトは非常に基本的なもので、コンパイルを選択していない場合でも、.DLL およびその他のファイルをすべてインストールしようとします。
かなり短い時間でプロセスが完了し (ここでも、エラーは悪く、警告は問題ありません)、先に進むことができます。
建物ジオス:
これには、少し余分な時間と労力がかかります。最新の安定版リリースとナイトリー スナップショップの両方をダウンロードしたことを覚えていますか? まだ行っていない場合は、両方を別のフォルダー (例: '\Temp\GEOS' と '\Temp\GEOSnap') に抽出します。
フォルダ「\Temp\GEOSnap\src\triangulate」を「\Temp\GEOS\src」にコピーします。何らかの理由で、この記事の執筆時点では、'\triangulate' が最新の安定版ビルドに含まれていません。「\GEOSnap」に必要なのはこれだけです。先に進む...
GEOS\makefile.vc パッチを「\Temp\GEOS\makefile.vc」にダウンロードします。- 「ありがとう」と言ってください。
GEOS\src\makefile.vc パッチを「\Temp\GEOS\src\makefile.vc」にダウンロードします。- どういたしまして。
注:これら 2 つを混同しないでください。もしそうなら、それはあなたにとって悪いことになります。
GEOS Trac #574 からの修正の実装に加えて、MSVC 用のこれら 2 つの makefile は、基本的なインストールおよびアンインストール機能を実行するコードを追加します (たとえば、'nmake install-all ...')。それ以外の場合は、すべてのファイルを手動でコピーするか (あちこちにたくさんあります!)、CMake などの別のビルド方法を使用する必要がありますが、これは現時点では少し危険です。
「\Temp\GEOS\src」に移動し、「dirlist.mk」を編集して、示された行番号に次のコードを追加します。
Line 45: triangulate \
このエントリは、'simplify \' の下で、'util' の上にある必要があります。保存して閉じます。
CMD シェルを開き、ディレクトリを「\Temp\GEOS」フォルダに変更します (例:「cd c:\Temp\GEOS」)。
次のコマンドを入力します。
c:\Temp\GEOS\> nmake install-all /f makefile.vc PREFIX=c:\Install
「c:\Install」を「\Install」パスに置き換えます。長い、長い、長い時間の後、ビルド プロセスが完了します。ビルドを壊すようなエラーがなければ、GEOS が「\Install」にインストールされたことが通知されます。
依存ライブラリについては以上です。これで (ようやく) PySpatiaLite をインストールする準備が整いました!
PySpatiaLite のビルドとインストール:
PySpatiaLite を独自のフォルダー (例: '\Temp\PSL') の '\Temp' に展開します。
「\Temp\PSL」に移動し、「setup.py」というファイルを編集して、示された行番号で次のコードを変更します。
Line 45: include_dirs = ['c:\Install\include']
Line 46: library_dirs = ['c:\Install\libs']
Line 47: libraries = ['geos','geos_c','proj','iconv']
Line 48: runtime_library_dirs = ['c:\Install\bin']
上記の「c:\Install」部分を独自の「\Install」パスに置き換えますが、「\include」、「\libs」、および「\bin」部分はそのままにしておいてください。ファイルを保存して閉じます。
注: 47 行目に「,'iconv'」を追加するだけです。
CMD シェルを開き、ディレクトリを PySpatiaLite フォルダーに変更します (例: 'cd c:\Temp\PSL')。
次のコマンドを入力します。
c:\Temp\PSL\> python setup.py build
Spatialite アマルガムがダウンロードされ、必要なファイルがアンロードされ、ビルド プロセスが開始され、最終的に失敗するまで待ちます。
うん。それは正しい。ビルドは失敗する可能性があります (これを読むまでに Loki が問題を修正していない限り)。
失敗した場合は、失敗メッセージの約 14 行上にあるコンソール出力を確認してください。次のような不潔なコードの混乱に埋もれていることがわかります。
-DVERSION = "3.0.1"
その番号を書き留めます。今後、いくつかの場所でそれが必要になります。
CMD シェルを最小化し、'\Temp\PSL\amalgamation' に移動して、spatialite.c というラベルの付いたファイルを編集します。パニックにならない!それは大きく、悪く、恐ろしいですが、小さな変更を加えるだけです。それは、面倒ですが効果的な回避策です。
示された行番号に次のコードを追加します。
Line 54: #define VERSION "3.0.1"
注: "3.0.1" を上記の手順 30 (ここでは 5) で確認した数字に置き換えます。単一引用符 (') ではなく二重引用符 (") を使用していることを確認してください。そうしないと失敗します。はい、これが見つかりました
この変更を行う前に、なぜ失敗するのを待たなければならなかったのか疑問に思われる場合は、合併がダウンロードされるまでファイルがシステムに存在しなかったためです。最初のビルドの試み。
上記の手順 31 のコマンドを再実行すると、ビルドが正常に完了するはずです。
次のコマンドを実行します。
c:\Temp\PSL\> python setup.py install
そしてワラ!これ以上面倒なエラーが発生しないと仮定すると、最終的にビルド/インストール プロセスは完了です。クッキーを持って、自分の背中をなでてください。必要に応じて、これらの「\Temp」フォルダーをすべて削除できます。次に、すべてが適切に機能していることを確認するためのいくつかのテストを行います...
PySpatiaLite x64 のインストールのテスト:
CMD ウィンドウを開き、ディレクトリを '..\Python27\Lib\site-packages\pyspatialite\test' (例: 'cd c:\python27...\test') に変更します。
Python CLI を開始しないでください。次の各コマンドを連続して入力します。
c:\python27\...\test\> python dbapi.py
c:\python27\...\test\> python dump.py
c:\python27\...\test\> python factory.py
c:\python27\...\test\> python hooks.py
c:\python27\...\test\> python regression.py
c:\python27\...\test\> python spatial.py
c:\python27\...\test\> python transactions.py
c:\python27\...\test\> python types.py
c:\python27\...\test\> python userfunctions.py
各テストの後、x.xxx 秒で xx 回のテストを実行したこと、およびテストが成功 (OK) または失敗したことを示すレポートを受け取る必要があります。それらがすべて合格した場合、あなたはゴールデンです。
注:「spatial.py」は、SpatiaLite のバージョンが「2.3.1」であると想定しているために失敗する可能性がありますが、あなたのバージョンは「3.0.1」である可能性があります。心配する必要はありません。ファイルを編集するだけでこれが修正され、テストを実行できるようになります。
「spatial.py」を編集し、「2.3.1」を実際にインストールしたバージョンに変更します (上記のステップ 30 (PySpatiaLite のビルド - ステップ 5) の番号を覚えていますか?) 次の行番号で:
Line 18: self.assertEqual(row[0], "3.0.1")
「spatial.py」テストを再度実行すると、問題なく動作するはずです。とにかく、このテストでpyspatialiteのバージョンをチェックしたい理由がよくわかりません...先に進みます!
組み込みのテストは素晴らしいですが、より現実的なテストはどうでしょうか? データベース内のデータを実際に作成、入力、ポーリング、および操作する場所です。ええ、それはチケットのように聞こえます!
オンライン Spatialite クックブックの「言語バインディング: Python 」セクションの一番下までスクロールし、「spatialite_sample.py」コードを新しい Python ファイル (「psl_sample.py」など) にコピーします。
このテストを保存して閉じ、実行する前に、コピー/貼り付けエラーの可能性がないか確認してください。示されている行番号で、コードが次のように正確に読み取られることを二重に確認してください。
Line 28: sql = "SELECT AddGeometryColumn('test_pt', "
Line 29: sql += "'geom', 4326, 'POINT', 'XY')"
HTMLコードからPythonファイルへの変換で何かが失われていると推測しています。これは、このコードを複数のソースからカット/ペーストするたびに、28行目の最後のスペースと引用符が29行目の先頭にドロップされ続けたためです。 、 それも。簡単に修正できます。
保存して閉じ、実行します。その方法を実際に示す必要がありますか? さあ!ヒントについては、手順 35 (2 ここ) を参照してください。;-)
ビルトインとクックブック サンプルの両方のすべてのテストに合格したと仮定すると、すべての兆候は、PySpatiaLite の 64 ビット インストールが確実に行われていることを示しています。
祝う!(これを偶数の 40 に丸める必要がありました ;-) )
この「ちょっとした」HOW-TO がお役に立てば幸いです。フィードバック/更新/修正をお気軽にお寄せください。
よろしくお願いします、
-RMWChaos、あなたの友好的な近所の悪の支配者
http://www.thedarklands.com