Pythonの環境の仕組み

  • パイソンには2系と3系がある(あって、使えるパッケージが異なる)、とか
  • pipでパッケージをインストールする、とか
  • でもcondaというコマンドもある、とか
  • Anacondaを使えば、一発でそれなりのパッケージがそっくり手に入る、とか
  • 色々とその場しのぎで知っているけれど
  • そんなのを駆使して色々なパッケージを取ってきて使おうとすると、dependencyがうまく行かない、とか、conflictがある、とかに出会って、やる気がそがれる…
  • 少し、調べもの
  • python本体と実行環境(こちら)
  • pythonには本体があり、2系と3系とがあり、それぞれの系にバージョンがある
  • pythonにはパッケージがあり、それぞれ、バージョンがある
  • パッケージには依存関係がある
  • ということで
  • python本体の管理と、個々のパッケージのインストール・管理と、複数のパッケージの総体としての管理をする必要がある
  • conda(Anaconda,minicondaを束ねた考え方)の前には、pipで個々のパッケージ管理、virtualenvで複数のパッケージの集まりの管理、pyenvでパイソン本体の管理をし、それを記録したり移植したりするにあたり、requirements.txt , .python-versionと言ったファイルを作って管理していた
  • condaはこれを変えた管理の仕方
    • minicondaやanacondaには、パッケージが複数のバージョンのそれぞれで登録してあって、それらを組み合わせてpython本体とパッケージの集まりを、一箇所に集めて、それらを使って相互依存しながら実行できる「世界」を作る
    • その「世界」の記録がyaml形式ファイル
    • 逆に言うと、「世界」を自分で指定するのが「本来のやり方」で、それをせずに、pipで集めてきてごちゃごちゃっと作り、その環境で、また違うことをやろうとするのがある意味では間違いだ、と、そういうことのようだ
    • だから、まずは「この目的のための世界」の枠を作り、そこに必要なものをとってきて、自分のコードをその上で動かして、出来上がったらyamlにして、記録する、というのが王道
    • yamlファイルがあれば、それを読み込むことで、新しいPC環境上に実行環境を構築できる(こちら)
    • condaに置かれていないパッケージはpipで取ってくる
  • こちらも参考になる