endaaman.com

2021-06-09

日記

俺的Python環境2021

conda + jedi + cocが俺の答えだ!

環境の要件

どう転んでも変わらない条件は以下のとおりである。

  • PyTorch使用
  • NeoVimユーザー
  • Arch LinuxとUbuntuを行き来する
  • WindowsやMacは無視していい

俺の解答

  • 仮想環境管理はConda
  • 補完はcoc-python + jedi

Condaを使うわけ

簡単な比較を作ってみた。

環境 良い 悪い
Conda PythonとCUDAのバージョン管理できる。PyTorchもバージョン管理しやすい 依存性解決が遅い上にたまに失敗する。パッケージの出し入れが面倒くさい
Docker 確実に環境を分離できる とにかく管理が面倒くさい。GPU透過などやりたくない設定が多すぎる
Poetry デファクトっぽい。依存解決は速い tomlの記載が面倒くさい。バージョン指定など厳密すぎる。要パッケージ化
Pipenv シンプル 依存解決が病的に遅い。メンテされてない疑惑
裸virtualenv シンプル、速い ツールチェインが貧弱

Arch使ったりUbunut使ったりな環境でPyTorchのバージョンを揃えたい。そうなるとPythonとCUDAバージョンも統一したいが、そうなるとCondaかDocekerかとなる。 Dockerは確実に環境を分離できるが、それ以外のデメリットが多すぎる。Pythonランタイム自体コンテナ内に閉じ込められているし、スクリプトなどもコンテナ内に置く必要がある。 念の為下三者も考慮すると、CUDAは百歩譲って頑張って合わせるにしても、ArchとUbuntuで同じPythonを使うにはPython自体をランタイムとして配布されている必要があり、UbuntuなどシステムのPythonを3.8に置き換えるにはなかなかの手間である。 アプリを作るならPoetryで、レガシーな環境でやるならvirtualenvみたいな使い分けはあるが、今回はこれらの出番ではないかな。

jedi + coc-python


©2024 endaaman.com