パッケージ管理ツールはちゃんとありますよ。「pip」というツールで、Pythonが入っていれば通常一緒にインストールされています。使い方もnpmとよく似ていますね。
Python用のパッケージ管理ツールは、他にも多機能なものや複雑な依存関係を整理してくれる有料ツールがありますが、大規模な開発以外ではpipで十分です。選択肢がたくさんありすぎて逆に知名度が低いんですかね。
なお、質問にある「仮想環境」は、ものによってはpyenvで解決できるかもしれません。これは複数のPythonのバージョンを切り替えて使えるツールです。
まぁ、専用のサーバーに本番リリースする本格的な開発なら、今どきはDockerなどの仮想サーバー(正確にはコンテナ)上で開発するのが一般的です。独立した環境なので安心して壊せますしすぐ作り直せるので、言語に関わりなく最近のWeb開発の本職は大体みんなDockerを使いますね。
Pythonはライブラリありきの言語なので、パッケージ管理ツールが無いとキツイです。なんにせよPythonに興味を持ってもらえて嬉しいです。頑張ってくださいね。
すでに
- pip
- pipenv
- poetry
- pdm
- rye
など複数の本体及びライブラリマネージャーがあります。現状はpipがほぼ本体に付属している標準ですが、現在では他の言語のようにpyproject.tomlというtomlファイルに設定を集約する流れになっており、これに対応しているのはpoetry,pdm,ryeなどになります。poetryとpdmは十分に枯れていて私は現在pdmを常用しています。ryeはツールをRustで作るという近年の流れを汲んでいて今後に期待です。
pdmを使用するプロジェクトテンプレート
を公開していますのでよろしければ使用してみてください。脚注
複数のアプリを開発している場合に問題が起きる場合があります。
Xというパッケージを使っているとします。
AというアプリをXのバージョン1.0を前提に作りました。
その後、Xのバージョン2.0がリリースされたので、2.0を入れました。
BというアプリをXのバージョン2.0を前提に作りました。
この場合、Aは、Xのバージョン2.0が動いてしまうため、不具合が出る可能性があります。
すぐに2.0を前提に直せば良いですが、複数アプリがある場合に対応が大変です。
アプリ毎に仮想環境を分けて使っていれば、このリスクは避けることができます。
1つのPythonのバージョンしか使わないのであれば問題はありません。
LinuxなどはシステムでPythonを使った処理がかなりあるので例えばその前提としているPythonのバージョンが3.4だった場合にバージョン3.7のPythonを入れてしまうと動かなくなる可能性があります。
ですので仮想環境を作ってOSの実際の環境と切り離しておくことが必要になります。また他のライブラリが最新のPythonに対応していない場合なども仮想環境を作っておいて様々なバージョンのPythonを使うことができます。
標準公式では無いからと、anacondaの以前のメリットであるビルド済みバイナリライブラリを標準の配布形式でも提供するようになったことや、複数バージョンランタイムもOSのパッケージマネージャーで賄えるようになった事などがあります。
あとは、大規模利用については有償ライセンスが必要になります。
Pythonのトラブルシュートになるとどの環境かという情報が重要です。つまり環境がOS以外にも分派があることになり、トラブルシュートをややこしくしている一つの要因でもあります。
個人的にAnacondaは思ったよりもLinuxディストリに近いリポジトリで、ルートサーバー証明書まで配布しています。この辺り、世の中の脆弱性対策への追従なども気になるところ。
などなどいくつかの不安がありつつ、標準でほぼ困らないので私は標準を使いたいですね。
個人のアプリ等の商用でライセンス料が月1500円位かかりますし、個人の非商用や学術用なら無償ですが、200人以上の規模の会社内だと例え1人だけの勉強用でも商用とみなされるのが辛いですね。
pipenvとpoetryの両者を使いましたが自分の範囲では特に機能に違いはありませんでした。むしろ、pipenvはlockが著しく遅いという問題があります。matplotlibやnumpyを含んだプロジェクトのlockが数分間経っても終わりませんでした。githubなどにも遅いというissueが繰り返し建てられています。現状ではpipenvを選択する理由がありません。
pipenvでLockingが無限に終わらないとき - Qiita
pipenv install is very slow · Issue #356 · pypa/pipenv
Pipenv very slow. Takes an hour to install and lock. · Issue #2873 · pypa/pipenv
あまりに糞すぎて以下のように公式のdocが(短時間だけ)書き換えられる始末。
one line · pypa/pipenv@1c956d3
**Pipenv** — the absolute worst available today for managing your application dependencies.
私もよく分かってませんが、ユーザ環境を作るという意味ではどちらも変わりません。
PipenvとPoetryは機能がほとんど変わりませんが、PoetryはライブラリをPyPI · The Python Package Indexにpublishする機能があるので、ライブラリを作る人はPoetryの方がいいのかもしれません。
Pipenvは1年前までは、全くバージョンアップしなかったのでやる気がなくなったのか?と思ったりもしたのですが、最近は順調にバージョンアップしているようなので、もはやどっちがいいかは分かりません。
なお、単にPythonを使うだけならAnacondaとかもっと何でもありのディストリビューション(?)とはいいませんが、それら環境全部入りを入れてしまった方が楽です。
これらはどちらかというとほんとにちょっとした動作環境か、本番環境に近いのを作るのにどうするかで考える方がいいと思います。
追記: PyPyでは違いました。PyPIの話です。
pip はPythonのライブラリーをインストールしたり依存関係を管理するコマンドです。仮想環境を作る機能はありません。
仮想環境を作るときは、virturlenvやvenvというコマンドを使います。
そして、Pipenvというのは仮想環境も作れるし、仮想環境内のライブラリーのインストールも両方出来るコマンドです。
私はvenvで仮想環境を作って、仮想環境内でpipを使うのが一番しっくり来るのですけど…
0 件のコメント:
コメントを投稿