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`を作ります。
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#
をつけます。
pass#self.dll_libraries = get_msvcr()
Lib\site-packages\numpy\distutils\mingw32ccompiler.py
は96~104行目を#
をつけてコメントアウトします。
# 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
早速試してみます。
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
色が違うのはご愛敬。