pythonの環境構築

pythonの環境構築ではanacondaを使う方法とpyenvを使う方法がよく紹介されている.私はpyenvを使う方法を推奨したい.というのも,パッケージによってはanaconda下で動かないものがまれに存在し,anacondaで環境を作っているとそういう時に困るからだ.pyenvで環境を作っておけばそういう時にanacondaではない(例えばminicondaなど)で環境を作ることができる.というわけで汎用性の面でpyenvの方が優っていると考えている.

pyenvのinstall方法

macならbrewでインストールすることが可能.

brew install pyenv

githubからcloneすることもできて,こちらはどのプラットフォームでも動作するのでおすすめだ.

# ~/.pyenvというディレクトリにインストール
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# オプションでpyenvの高速化のためにdynamic Bash extensionのインストールも可能.
cd ~/.pyenv && src/configure && make -C src

いずれの方法でインストールしたとしても,bash_profileやzshrcに以下の設定が必要だ.

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

pyenvで新しい環境を作る場合,

pyenv install --list

でインストールできる環境を確認した上で,例えば

pyenv install anaconda3-2023.03

のようにすれば良い.代替として最新版でよければ

pyenv install anaconda3-latest

でも可.

anacondaのinstall方法

公式ページからgraphical installerまたはcommand line installerをダウンロードできる.

# コマンドラインインストーラの場合はダウンロード後,以下を実行.
bash /path/to/Anaconda3-2022.05-MacOSX-arm64.sh

PATHの設定が自動的に.zshrcに書き込まれているので必要に応じて書き直すべし.

仮想環境の構築

pythonを使う場合,プロジェクトごとに仮想環境を作成し,そこにプロジェクトごとにpythonと必要なパッケージをインストールしていくのが主流.例えばプロジェクトごとに違うバージョンのpythonが使いたい時にも,仮想環境をコマンド一つで切り替えれられるのでとても便利.

計算科学で使えるパッケージ

  1. seekpath

    Kpathを探したい場合.パッケージ自体を使うことも可能だが,以下に示す他のパッケージでもエンジンとして利用されておりそちらを使う方が便利だと思う.

  2. pymatgen

  3. ase

matplotlibによる作図

その他

自作モジュールのパッケージ化.CLIも含めることができる.

クラス

  • 継承
  • メソッドのオーバーライド

  • superによる親クラスのメソッドの利用

コードの書き方

可読性の良いコードを書くために...

docstring(関数やクラスのドキュメント)

コーディングスタイル

  • _(アンダースコア)を関数の前につけた場合 この場合,システム的な制約を受ける.関数が含まれるモジュールからワイルドカードでインポートする場合にアンダースコアで始まる関数は読み込まれない.

  • _(アンダースコア)をクラス内のメソッドの前につけた場合 そのメソッドはクラスの中だけで利用するという慣例がある.わかりやすさのためにつけておくのが吉.

  • __(アンダースコア2つ)をクラスの変数やメソッドの前につけた場合 ネームマングリング(Name Mangling)が適用される.アンダースコア一つと違ってクラス外からのアクセスができなくなる.

自作モジュールに関して

自作モジュールをjupyter環境でリロードするには

%load_ext autoreload
%autoreload 2 

の2行を書いてこの行を再評価する.

  • サブコマンド

    https://qiita.com/oohira/items/308bbd33a77200a35a3d https://gist.github.com/jirihnidek/3f5d36636198e852280f619847d22d9e

コーディング全般

  • 驚き最小原則
  • Separation of concerns
  • Single-responsibility principle

読みやすいコードのために気を付けるべきこと.

  • 1: 中身が推測できる関数名(getXXX,)
  • 2: 型や可視性が推測できる変数名(リストならxxxListなど)

  • デバックオプションには__debug__変数を利用する.
    if __debug__:
       print("Debug ON")
    else:
       print("Debug OFF")
    

    のようにして,-Oオプションをつける.

    python -O abc.py
    

    参考