💭

中級者へのModern Python

に公開
4
GitHubで編集を提案

Discussion

tfukumoritfukumori

参考になる記事ありがとうございます!
Pythonは色々やり方があるようで、確立された方法を整理して読むことができ参考になります...!

差し支えなければ1点教えていただけると幸いです。

  • pyenv + venv(Python 3.3から標準)ではなく、pyenv + pipenvを選択した具体的な理由(運用上困った点)はあるのでしょうか?

    ざっと使用した限りでは、pyenv + venvでの運用でも特に困らなかったのと、標準の仮想環境として採用されたことを考えて、venvのほうが良いのかなと考えていました。

    Pythonを触り始めたのは1年ぐらいなので、検討違いのことを記載していたら申し訳ありません。。

ganyariyaganyariya

pyenv + venvでも問題はないかと思います。(困ることはないと思います。)

ただ、以下の点などで自分はpipenvを使っています。

  • pyenv + venvだとコマンドが多くなりがち(pyenv -> venv作成 -> activate (bash,fishなどでファイルが異なる))
    • pipenv install pipenv shell
  • requirements.txtにすべてのバージョンが入ってしまう(ライブラリのアップデートがし辛い)
    • Pipfile, Pipfile.lock (poetryだとpyproject.toml、ただこれはpoetryだけの標準でなく、PEPで規定された規格です)
  • コマンドを登録できる

venv, pipenv, poetryのすきなものを使うと良さそうです。(やはりこれですね あとはプロジェクトが指定しているツールを使うことになりそうです)

tfukumoritfukumori

コメントありがとうございます。
確かに、プロジェクトが指定しているもの、そこは大事ですね...!

pyenv + venvだとコマンドが多くなりがち

仮想環境作成時は確かに少し面倒ですね...。一度仮想環境を作成すれば、VSCodegが自動的に切り替えてくれるので気にならないのですが。

ライブラリのアップデートがし辛い

  • 使用したいライブラリのみを指定できる(Pipfile)。参考1参考2
  • requirements.txtでバージョン固定できることが逆に邪魔になることがある

ということですね。 .NETをメインで使っているのですが、Pythonでは実際に使いたい(参照したい)ライブラリがわかりにくいと思っていたので、標準(venv, pip)以外のツールが色々と開発されている理由も納得いたしました。

venvを使う場合はpip toolsというものもあり、pipenvコミュニティでも議論されているようですが、見る限り確かにpipenvのほうがシンプルですね。

pipenv、poetry含め実際に検証していこうと思います。
勉強になりました。ありがとうございます。