前回の続きになります。
前回は仮想環境が必要なの?というテーマで書いてみましたが、とはいえ使えるに越したことはないので実際に試してみて使った感想を残そうと思います。
今回仮想環境を構築するにあたって試してみたのは以下
- pip
- venv
- pyenv(環境的に使えなかった)
- pipenv
- poetry
- docker(環境的に使えなかった)
- Rye(環境的に使えなかった)
一応ざっくりと説明すると
- ライブラリのインストール:pip、pipenv、poetry
- 仮想環境の構築:venv、pipenv、poetry、docker
- pythonのバージョン管理:pyenv、docker
一般的に組み合わせとしては
- pip + venv + pyenv
- pipenv + pyenv
- poetry + pyenv
- docker + pipenv
あたりだと思います。私も依存関係とかは詳しくないのでそうなんだという認識ですが…
まずは “pip” 、pythonユーザーであれば皆さん使用してるので説明は省きますが、標準ライブラリで馴染みがあるものですね。
次は “venv” 、昔はvertialenvが使われていたみたいですがそれが標準ライブラリになったものです。vertialenvとは別物ですが使い方は同じですね。
仮想環境の作成や有効化ができ、標準ライブラリなので様々な教材でも使用されると思います。有効化に面倒な設定があったり、自動化やライブラリ一覧の出力にも手間がかかるので少し使いにくいですが、覚えておいた方がいいですね。vscode使うならインタープリターの選択で有効化できますが…
次は “pyenv” です。私の環境ではシステム環境変数をいじれないので使えませんでした。
pythonのバージョンがインストールできず、localやglobalの設定もできない状況でした。使えなくて残念ですが、vscodeのインタープリターで選択すれば問題ないのでいいかと
あるいはユーザー環境変数で任意のpythonバージョンのPATHを上に移動させるとかですかね。
次は “pipenv”です。こちらはライブラリのインストールと環境変数の作成が一体化した便利なライブラリになっています。
個人的には一番使いやすく感じました。仮想環境構築のしやすさ、ライブラリ一覧の自動化は便利だなと感じました。制限がなければ “pipenv + pythonのバージョン管理” が一番楽な気はします。
ただ、インストールの遅さや抱えてる問題もあるみたいなのでpipenvさえあればいいとは思いませんが、優先度は高いというイメージですね。
次は “poetry” です。使う用途としては”pipenv”と同じですが、異なる点で言うとPyPIにビルド・公開ができるという点になります。
PyPIにビルド・公開することはあまりないので、そうなるとpipenvとの使いやすさを比べてどうか?ということになりますが、使いやすさはpipenvに軍配が上がります。
まず、poetryはpython3.9以上でしか使用できません。今の現場はpython3.7(いつか3.11になる予定)なので使えなかったりします。また、ライブラリのバージョンでも同様に使えないものがあります。
他にも仮想環境の有効化がvenvと同様手間がかかったり、vscodeのインタープリター選択画面に出なかったのでパスを通す設定をしないといけないなどがあったりして使いにくさを感じました。私の環境構築方法に問題があるかもしれませんが…
おまけとしてRyeはチームよりも個人開発向けなのでやろうとしたのですが、客先PCでは使わないほうがよさそうです。個人で触ってみようとは思います。
それからDockerです。Desktop版をインストールしようとしましたがダメでした。とはいえAWSの実行ではdockerコンテナを利用しているので、ローカルでは使えませんが開発や本番環境では使われているのでdockerfileの中身やdocker-composeをチェックしてみます。ローカルだとどんな使いやすさなんですかね?
前にも話したんですが、pythonやライブラリのバージョンが固定されているような現場では正直不要だとは思いますが、知っておいて損はないかと思いますし、知識はどこかで役立つと思います。
手軽で使いやすいという点では “pipenv” > “poetry” >= “pip + venv”に”pyenv”を足したものかと思いますが、覚え順としては”pip + venv” > “pipenv” > “poetry” がいいと思います。ついでにDockerまで使えればほぼ問題ないという印象です。
そういえば他の言語ではどのように環境を作ってるのか?そもそも仮想環境を作ってるのか知らないのでこれを機に少し調べてみようと思います。他の言語で使われてるものが新たな視点をもたらしたりもしますでしょうし、ではでは。