2023年10月26日木曜日

今後Pythonがnpmのように自動で仮想環境を作ったり実行したり、自動でパッケージを整理してくれるようアップデートすることはありえますか?

https://jp.quora.com/%E4%BB%8A%E5%BE%8CPython%E3%81%8Cnpm%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%87%AA%E5%8B%95%E3%81%A7%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%8A%E5%AE%9F%E8%A1%8C%E3%81%97

並べ替え
 · 
フォロー

パッケージ管理ツールはちゃんとありますよ。「pip」というツールで、Pythonが入っていれば通常一緒にインストールされています。使い方もnpmとよく似ていますね。

Python用のパッケージ管理ツールは、他にも多機能なものや複雑な依存関係を整理してくれる有料ツールがありますが、大規模な開発以外ではpipで十分です。選択肢がたくさんありすぎて逆に知名度が低いんですかね。

なお、質問にある「仮想環境」は、ものによってはpyenvで解決できるかもしれません。これは複数のPythonのバージョンを切り替えて使えるツールです。

まぁ、専用のサーバーに本番リリースする本格的な開発なら、今どきはDockerなどの仮想サーバー(正確にはコンテナ)上で開発するのが一般的です。独立した環境なので安心して壊せますしすぐ作り直せるので、言語に関わりなく最近のWeb開発の本職は大体みんなDockerを使いますね。

Pythonはライブラリありきの言語なので、パッケージ管理ツールが無いとキツイです。なんにせよPythonに興味を持ってもらえて嬉しいです。頑張ってくださいね。

Toshiharu Ito
 · 10月19日
Pythonが他の言語に比べて遅いなら、なぜいまだに使われているのですか?
Pythonはもともと、何より「おしゃれで素敵な言語」を目指してきた言語です。(英語でelegant) Pythonはコンピュータ言語の中でも英語などの自然言語に近く、シンプルで読みやすいため、教育機関でC系言語を学ぶことが多い本職のプログラマーより、AIを研究する科学者やアナリストなどに好まれる傾向がありました。とはいえ本職のプログラマーからも支持を得られなければ言語はあっという間に消えていきます。Pythonがすでに30年以上の歴史を刻んできたということは、それだけのファンを獲得し維持してきたということです。Pythonは実用主義の多くの言語(多くはCやshellに似ている)とは対照的に「コードの見た目とシンプルさ」に重点を置いて人気を維持してきた言語です。ある意味Pythonは「Cのカタにハマった世界に風穴を開けたファッションリーダー」なんですよ。 ですから回答としては、「なぜ使うかって?Pythonが好きだからさ!」になるでしょうね。 Python「カワイイは正義!」(画像はBing Image Creatorで生成) なお、速度が二の次にできる理由は他にもあって、仮想サーバーやクラウドサービスが浸透した現代のWebサイトの開発では、言語そのものの処理速度がサーバー運用コストに大きな影響を与えることは滅多にありません。(爆速で有名なDenoとNodeのシェアは現在合わせても0.2%程度です) ほとんどの現場では社内のプログラマーが使い慣れた言語を使う方が費用対効果は高いのです。実際人気サービスになったら丸ごと作り直せばいいですし。その頃にはいくらでも札束で殴れます。 さらにもう一つ、Pythonが支持される理由は、「超高速のC/C++製ライブラリが充実しているから」です。 PythonにはCやC++でPython用のライブラリを開発するためのツールが標準で提供されています。さらにPython用ではないC/C++製ライブラリを読み込むためのブリッジライブラリも存在します。つまりPythonの公式が「速度が足りない時はC/C++を使ってね」というスタンスなんです。特にAI系の演算は重いものが多いため、最近この傾向がさらに強まりました。とはいえ一般的なWebサイトの開発でC/C++の助けが必要になることは滅多にありません。いくらPythonがPHPやRubyより遅いといっても、人間が目で見て分かるほどの差はないからです。 ということで、オシャレで素敵な見た目を備えつつ、実はC/C++というレーシングカーまで乗りこなすPythonの魅力が少しでも伝われば嬉しいです。言語はあくまで好みなので、色々使ってみると視野も広がって楽しめます。 なおPythonとは正反対、実用主義の塊みたいなPHPのWeb開発でのシェアはなんと8割です。2番手のPythonと合わせればWeb系バックエンドのかなりの部分をカバーできますよ。
Toshiharu Ito
 · 10月17日
現代のWEBアプリ開発はPHP vs django vs node js どれで行うべきでしょうか?もちろんプロジェクト規模によって異なるでしょうが。
正直なところほとんど差はありませんので、あなたの好きなものを選んでください。 (画像はBing Image Creatorで生成したものです) 実は現代のコンピュータ言語やフレームワークは、お互いの良いところをかなり素早く吸収し合っているため、同じ用途で開発された言語やフレームワークに機能的な差異はほとんどありません。 長い歴史を持つフレームワークすら、旧バージョンとの互換性を捨てて新時代の開発手法に準拠した設計で開発し直すのが当たり前の時代です(開発屋的には困ってますが…)ので、最新版の言語やフレームワークを使う限り、自分が使いやすく手に馴染んだ道具を使って開発する方がメリットが大きいのです。仮想サーバーを束ねれば大概の性能差はカバーできる時代ですしね。 私個人のWeb仕事では、メインがPHP(Laravel/Symfony)で小規模ながらPython(Djangoの開発言語)やJavaScript(Node.js)を使っています。ごりごりのWebアプリのフロントエンドも書きますし、たまに巨大なSQLも書きます。以前はJavaやPython、Perl、Web向きではないものではC++もかなり使ってきました。 私の勝手なイメージで各言語の性格を説明すると、 * Python = おしゃれなクラスメイト * NodeやDeno = スピード狂のバイク乗り * Perl = ニヒルなマッドサイエンティスト * Java = お堅い風紀委員 * PHP = ハイスペック地味子 * C++ = 会うたびに若返るのじゃロリBBA って感じでしょうか。皆良い子たちですよ。 言語紹介系の回答まとめました。たまに増えます。 C++ C PHP Python JavaScript (jQuery) ChatGPT (AI) システムの発注を考えている方向け 学生さんやプログラマーを学んでいる人向け 「どの言語を最初に学ぶべきか」論争 プログラマー不要論 プログラミングの勉強法 フリーランス プログラミングが楽しくない人へ 開発環境 プログラマー向け Vim (neoVim) 効率化 見積もり インデント 例外処理
 · 
フォロー

すでに

など複数の本体及びライブラリマネージャーがあります。現状は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 コメント:

コメントを投稿