dondakeshimoの丸太

データサイエンス/Webアプリケーション/

pythonのversion周りがなんかあれな話するわ

pythonのバージョンはややこしい

python以外に4つくらい他の言語に触れたことがあるのですが、 pythonに勝る美しい言語はないと思っています。 そんなpython最大の弱点が、version問題かなと。。 python2系とpython3系があるんですが、 互換性がないとかいうね。完全切り捨て御免とかいうね。 というわけで、いろんなバージョン管理方法があるわけですが、 筆者は pyenv を使わせていただいてます。 なんかいろんな記事をさらっと読んだ感じ、 virtualenvデファクトスタンダードで、 pyenv がかなりこなれてて、 venv とかいう公式のバージョン管理ソフトができたっぽい。

…いや、待て。なんでややこしいバージョン管理を簡潔にしたいのに、 その方法でまた悩まなあかんねん!! ってことで、師匠に教えてもらったpyenvから一歩も動くことなく、 盲目にこれがいいと信じながら使っております。

現在の管理状況

機械学習始めたらめっちゃバージョン管理必要になった

問題は 機械学習なんですよ 。 最近勉強会に参加させていただいていて、 発表者の方がちゃんとipynb形式でデモを実行できるように準備してくれるんですけど、 pythonのバージョンが割とまちまち… 具体的に機械学習で使うバージョンは多分

  • 2.7
  • 3.5
  • 3.6

だと思うんですけど、 2系と3系の相互互換がないのはいつものことで納得いくんですが、 何故3.5と3.6までうまくいかないんだ!? ということで、原因を探るよりも もうpyenvに全部入れてしまえばよくね!? ってなりました。 というわけで現在、筆者のpyenv管理下には上記のpythonバージョンを含んだ anacondaが3つぶち込まれています。それぞれに pytorchtensorflow がぶち込まれています。 なんか汚らしい気がするので、こういう状況での ベストプラクティスをどなたか教えてくださると嬉しいです。

pyenv-virtualenv

機械学習では使うの面倒だなってなりました。 誰かとコードを共有するってなったら Dockerでも勉強するか…と思っています。 それ以外の、例えばデスクトップアプリなどでは大活躍してくれていますが、 どんどん環境増えたら管理がまた面倒になるなと思って、 みなさんがどういう管理をしているか気になります。

まとめ

もう自分で使う分にはとりあえず依存関係考えずにやろうかなと 開発の段になった場合にDockerの導入か、 virtualenvの導入か、(pyenv-virtualenvは開発の仮想に向かなそう?) やらを考えることにしました!(必殺後回し戦法!)