LoginSignup
2
3

More than 5 years have passed since last update.

Windows版Minicondaでf2py

Last updated at Posted at 2017-03-11

Macから浮気してWindowsで遊んでいます。Windows 10 Pro/EducationはUbuntu on WindowsやDocker for Windows、Hyper-Vが使えるのでいかようにもなるのですが、管理者権限のない実習室のWindowsを使ったり、使って教えたりしなければならないこともあるかと思います。

Pythonのオフィシャルインストーラーも管理者権限なしでインストール可能ですが、numpyなどをやろうとするとCondaさんが便利です。私はMiniconda Python-3.6 64-bitを使いconda install jupyterしましたが、Anacondaを入れれば楽かと思います。numpyにはf2pyが含まれているのですが、そのままでは使えるようになっていませんでした。

以下DOSコマンドは苦手なのでエイリアスが用意されているPowerShellや、後でインストールしたgit for windowsのbashを使っています。

gfortranのインストール

mingw-w64を入れようかとも思ったのですが、Condaさんに用意されていましたのでそちらを入れることにしました。

conda install m2w64-gcc-fortran

インストールしただけではパスが通っていませんので、

C:\Users\ユーザ名\Miniconda3\Library\mingw-w64\bin

(Anacondaの場合はMiniconda3ではなくAnaconda3、以下Condaまでのパスは省略)をパスに追加します。Cortanaさんに「環境変数」と聞くと、環境変数を設定するコントロールパネルを開いてくれます。上部のユーザー環境変数のPathは編集できるはずです。

f2pyがない

Condaさんのf2pyはScripts\f2py.pyにあります。実行できるようにバッチファイルScripts\f2py.bat`を作ります。

f2py.bat
python %~dp0/f2py.py %*

PowerShellを使う場合は$profileに関数を書いてもいいでしょう。

function f2py(){python \Users\ユーザ名\Miniconda3\Scripts\f2py.py $args}

ソースの修正

f2pyを実行できるようになりましたが、ソースを与えるとValueError: Unknown MS Compiler version 1900というエラーが出ます。少しソースの修正が必要です。

Lib\distutils\cygwinccompiler.pyは、157行目と318行目をコメントアウトしてpassで何もしないようにします。pass#をつけます。

cygwinccompiler.py
pass#self.dll_libraries = get_msvcr()

Lib\site-packages\numpy\distutils\mingw32ccompiler.pyは96~104行目を#をつけてコメントアウトします。

mingw32ccompiler.py
# Check for custom msvc runtime library on Windows. Build if it doesn't exist.
 #msvcr_success = build_msvcr_library()
 #msvcr_dbg_success = build_msvcr_library(debug=True)
 #if msvcr_success or msvcr_dbg_success:
     # add preprocessor statement for using customized msvcr lib
 #    self.define_macro('NPY_MINGW_USE_CUSTOM_MSVCR')

 # Define the MSVC version as hint for MinGW
 #msvcr_version = '0x%03i0' % int(msvc_runtime_library().lstrip('msvcr'))
 #self.define_macro('__MSVCRT_VERSION__', msvcr_version)

hello

早速試してみます。

foo.f90
subroutine hello()
    print *, "Hello"
end subroutine hello
f2py -c --fcompiler=gnu95 --compiler=mingw32 -m foo .\foo.f90
PS C:\Users\ユーザ名\Development\foo> python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo
>>> foo.hello()
 Hello from Fortran90!!!
>>>

当初UnicodeDecodeErrorが出て悩んでいたのですが、シェルを英語に切り替えたところうまくいきました。日本語に戻してもエラーが再現できないので謎です。

chcp 437

Lowtran

lowtranで試してみます。gitはcondaにも入っていますが、GUIやbashもついてくるgit for Windowsを入れてみました。

pandasが入っていなかったのでcondaで入れました。

git clone https://github.com/scivision/lowtran
cd lowtran
setup.py develop
conda install pandas
python DemoLowtran.py -a 0 12.5 25

lowtran.png

色が違うのはご愛敬。

参考にしたサイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3