[OSGeoJapan-discuss] QGIS2.12.3 32bitで自前moduleのエラーについて【解決】

tys t.oba @ tys-yokohama.co.jp
2016年 8月 10日 (水) 21:35:39 PDT


メーリングリスト及び回答してくださった皆様

f2pyで作成したmoduleの読み込みに成功しました。
お騒がせしました。

情報共有ということで以下に成功例を記載しておきます。

動作環境は、Windows 7 64bit 
QGISはOSGeo4Wのネットワークインストール QGIS2.16.1 32bit版をアドバンズインストール済み
(QGISのstandaloneでは動かず)
Fortran complierはMinGW32を利用

1.PyQGISを外部より使うため、PyQGIS.batファイルを以下のように作成
=======================
@echo off
SET OSGEO4W_ROOT=C:\OSGeo4W
call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
call "%OSGEO4W_ROOT%"\apps\grass\grass-7.0.4\etc\env.bat
@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
path %PATH%;%OSGEO4W_ROOT%\apps\grass\grass-7.0.4\lib

set QGISHOME=%OSGEO4W_ROOT%\apps\qgis
set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python;
set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\Python27\Lib\site-packages

set QGIS_PREFIX_PATH=%OSGEO4W_ROOT%\apps\qgis
set PATH=C:\Program Files (x86)\Git\cmd;C:\Program Files
(x86)\Vim\vim74;c:\MinGW\bin;%PATH%;C:\Program Files\R\R-3.3.1\bin\i386
cd %HOMEPATH%\development
cmd.exe
=======================

2.c:\OSGeo4W\binにあるqgis.batを以下のように編集。
c:\MinGW\binのパスを追加しています。
=======================
@echo off
call "%~dp0\o4w_env.bat"
@echo off
PATH %OSGEO4W_ROOT%\apps\qgis\bin;%PATH%;*c:\MinGW\bin*
SET QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis
SET GDAL_FILENAME_IS_UTF8=YES
REM Set VSI cache to be used as buffer, see #6448
SET VSI_CACHE=TRUE
SET VSI_CACHE_SIZE=1000000
SET
QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt4\plugins
start "QGIS" /B "%OSGEO4W_ROOT%"\bin\qgis-bin.exe %*
=======================

3.PyQIS.batを起動後、cmdコンソールよりqgis.batでQGIS2.16.1を起動。

4.pythonコンソールから自前のmoduleをimport
<http://osgeo-org.1560.x6.nabble.com/file/n5280336/import_success.jpg> 
importして実行が成功して、test.txtファイルがカレントフォルダーに作成される。

5.原因と解決方法
importできなかった原因として、f2pyでMinGW32のgfortranを利用した場合、
python側でimportする場合に必要なdllが読み込まれないことによる。
したがって、QGIS起動時にMinGW32のbinのパスを追加すれば良い。
ただし、QGISのstandalone版ではなぜかうまくいかない。

いろいろとお騒がせしましたが、とりあえずはOSGeo4Wを利用すればFortranで
自前のmoduleを作成して利用することが分かりました。

f2pyについては、
f2py -c --fcompiler=gfortran --compiler=mingw32 -m hogepy hoge.f
でhoge.fのpydが作成されます。

あまりにもマニアックで、利用する人はいないと思いますが。。。

ありがとうございました。




-----
/****************************/
合同会社TYS
技術開発部
大庭哲哉
http://www.disaster-software.net/
http://blog.godo-tys.jp/
/****************************/
--
View this message in context: http://osgeo-org.1560.x6.nabble.com/QGIS2-12-3-32bit-module-tp5278930p5280336.html
Sent from the OSGeo Japan Local Chapter mailing list archive at Nabble.com.


OSGeoJapan-discuss メーリングリストの案内