緒言
WSLでプログラミング環境を構築するときにあったらいいものを書いていく
基本pythonとfortran使いの人間が書くので、主にそちらに寄る記事になる
内容
WSLの導入
PowerShell を管理者として実行.
wsl --install
python
WSLインストールしてsudo apt upgrade
したらデフォルトでpythonの最新バージョンがインストールされてしまう。ご存じの通り最新バージョンはバグが多くあまりお勧めできないので、枯れたシステムであるひとつ前のバージョンを入れたくもなるだろう。
ちなみにpython3.12
ではf2pyの不具合がありコンパイルが困難.使えない.(2025/01現在)
しかし以下の方法を用いる場合,tk_dev
のインストールが前提であるが,こいつを入れるにはpython3.12
がグローバルに存在している必要がある.
よって,python3.12
は形式的に据え置いている必要があるのだ.
解決策
pyenv
を使ってそこにpython3.11
を入れておき,それをグローバルに設定して普段使いする
pythonの導入を頑張る
-
まず、システムのパッケージを最新の状態にする。
sudo apt update && sudo apt upgrade -y
-
pyenv
の導入.curl https://pyenv.run | bash
これで
pyenv
コマンドが使えるようになる -
Python のビルドに必要なライブラリをインストール
sudo apt update sudo apt install -y libffi-dev libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev \ libncursesw5-dev xz-utils tk-dev liblzma-dev
-
python3.11.11
をいれてみるpyenv uninstall 3.11.11 pyenv install 3.11.11 pyenv global 3.11.11 # 必要なら設定
global にすることで,デフォにできる.
matplotlibでTimes New Romanを頑張る
デフォルトではWSLにTimes New Romanがない.
Windowsのフォントディレクトリからコピってきて適切な場所に配置のうえ,フォントキャッシュを更新して認識させる必要がある.
-
windowsからフォントを移植する。
windowsにあるTimes New Romanは通常、ここにあるC:\Windows\Fonts\Times New Roman.ttf
この中に3つのttfファイルが含まれるので、これをWSLに移植するのである
-
まずWSLの一般的なフォントディレクトリを作成する。
sudo mkdir -p /usr/share/fonts/truetype/custom
-
そしてようやく移植を実行
sudo cp /mnt/c/Windows/Fonts/times*.ttf /usr/share/fonts/truetype/custom/
-
フォントキャッシュを削除して更新
sudo fc-cache -fv
-
さらに、matplotlib側でもフォントキャッシュを削除してフォントを認識させる
rm ~/.cache/matplotlib -rf
-
いったん再起動する。
fortran
fortranの導入を頑張る
-
まずはコンパイラから。
sudo apt install gfortran
で一発。
-
また、fortranといえば人類の叡智、lapackを入れたい。
sudo apt install libblas-dev liblapack-dev
で一発。
-
サンプルコード
program solve_linear_equation implicit none integer :: n, nrhs, lda, ldb, info integer, allocatable :: ipiv(:) real(kind=8), allocatable :: A(:,:), b(:) n = 3 nrhs = 1 lda = n ldb = n allocate(A(n, n), b(n), ipiv(n)) A = reshape([2.0d0, -1.0d0, 0.0d0, & -1.0d0, 2.0d0, -1.0d0, & 0.0d0, -1.0d0, 2.0d0], shape(A)) b = [1.0d0, 0.0d0, 1.0d0] call dgesv(n, nrhs, A, lda, ipiv, b, ldb, info) if (info == 0) then write(*, *) "x:" write(*, '(F12.6)') b else write(*, *) "error" end if deallocate(A, b, ipiv) end program solve_linear_equation
これを実行するには,
gfortran test_lapack.f90 -o test_lapack -llapack -lblas
として,
./test_lapack
で実行.
x: 1.000000 1.000000 1.000000
が出ればOK.