19

この質問のさまざまな側面に関する多くの投稿がありますが、すべてをまとめた投稿は見たことがありません。

最初の主観的な声明:Python言語を操作するときに経験する単純さは、インタープリターの外に出てデプロイメントの問題に取り組み始めると、バラバラになってしまうようです。同じマシン上に複数のバージョンのPythonを配置するのに最適な方法はありますか?パッケージはどこにインストールする必要がありますか?Disutils vs. setuptools vs. pipなど。デプロイメントに関しては、PythonのZenがかなりひどく悪用されているようです。Windowsでの「DLL地獄」体験の不気味な反響を感じています。

専門家は、これらの質問に関するある程度のベストプラクティスに同意していますか?

同じマシンで複数のバージョンのPythonを実行していますか?それらが共存できることをどのように確信していますか?新しいバージョンは、以前のバージョンに依存する他のプロセス(たとえば、OSベンダーによって提供されるスクリプト)の仮定を破ることはありませんか?これは安全ですか?virtualenvで十分ですか?

ローカルファイルシステム上のPython環境のさまざまなコンポーネント(サードパーティパッケージを含む)の場所の最良の選択は何ですか?信頼できる多くの異なるバージョンのUnixとWindowsOSの場所の間には、厳密または大まかな対応関係がありますか?

そして、沼地の最も暗いコーナー-どのインストールツール(setuptools、distutils、pipなど)を使用し、ファイルの場所、Python仮想環境、Pythonパスなどの選択でうまく機能しますか?

これらは難しい質問のように聞こえます。経験豊富なPythonistasが、これらの課題に対する標準的なアプローチ(または2つ)を定義したことを願っています。自信を持って使用できるシステムとして「一緒にぶら下がっている」(別個の無関係なツールのように感じない)アプローチは、非常に役立ちます。

4

3 に答える 3

8

私は、virtualenvが、同じマシン上で複数の環境を構成および維持するための唯一の信頼できる方法であることを発見しました。環境をパッケージ化して別のマシンにインストールする方法もあります。

パッケージ管理には、 virtualenvで非常にうまく機能するため、常にpipを使用します。また、gitリポジトリなどのさまざまなソースからパッケージを簡単にインストールおよびアップグレードできます。

于 2011-08-31T20:11:04.463 に答える
3

これは非常に幅広い質問であることに同意しますが、とにかくその多くの部分に対処しようとします.

あなたの主観的な声明について: Python の単純さと優雅さが、パッケージ化と展開の問題が突然単純なものになることを意味する理由がわかりません。パッケージングに関連するものには単純なものもあれば、そうでないものもあれば、可能性のあるものもあります。1 つの完全で堅牢で簡単なパッケージング システムがあれば、ユーザーにとって最善ですが、そのようにはなっていません。distutils が作成され、その後開発が一時停止され、setuptools が作成されて新しい解決策と新しい問題が追加され、distutils が社会問題のために setuptools からフォークされ、最後に distutils2 が作成されて 1 つの公式の完全なライブラリが作成されました。( distribute、distutils、setuptools、および distutils2 の違いについて詳しくは? ) 状況は開発者とユーザーにとって理想的とは言えませんが、私たちはそれを改善するために取り組んでいます。

複数のバージョンの Python を同じマシンにインストールするにはどうすればよいですか? 最新の OS を使用している場合はパッケージ マネージャーを使用し、UNIX でソースからコンパイルする場合は「make altinstall」を使用し、Windows でソースからコンパイルする場合は同様の競合しないインストール スキームを使用します。Debian ユーザーとして、「pythonX.Y」を使用して個々のバージョンを呼び出すことができること、およびデフォルト バージョン (「python」および「python3」) が Debian 開発者によって決定されることを知っています。 いくつかのOSは python == python2 という仮定を破り始めたので、それを祝福または非難するための PEP が進行中です: http://www.python.org/dev/peps/pep-0394/ 1 つの Python バージョンをデフォルトとして使用する方法。別の PEP があります: http://www.python.org/dev/peps/pep-0397/

パッケージはどこにインストールする必要がありますか? distutils を使用して、プロジェクトをユーザーのサイト パッケージ ディレクトリにインストールできます (PEP 370 または docs.python.org を参照)。質問は正確には何ですか?

同じプロジェクトの異なるバージョンの並行インストールはサポートされていません。インポート システムとパッケージング ツールの変更について議論するには、PEP が必要です。誰かがその議論を始める前に、virtualenv または buildout を使用することで十分に機能します。

「Python 環境のコンポーネント」の場所に関する質問がわかりません。

私は主にシステム パッケージを使用します (つまり、Debian で Aptitude パッケージ マネージャーを使用します)。プロジェクトを試すために、リポジトリのクローンを作成します。Aptitude で利用できないものが必要な場合は、ユーザーの site-packages ディレクトリにインストール (またはリポジトリに .pth ファイルを配置) します。カスタム PYTHONPATH は必要ありませんが、ユーザー サイト パッケージの場所を PYTHONUSERBASE で変更しました。私は setuptools/distribute の魔法と卵の概念が好きではないので、それらを使用しません。ただし、1 つのプロジェクトで virtualenv と pip の使用を開始しました (これらは裏で setuptools を使用しますが、プライベート インストールを作成したため、グローバル Python には setuptools がありません)。

于 2011-09-26T17:24:37.080 に答える
0

この分野のリソースの 1 つは、Tarek Ziade による書籍 Expert Python Programming です。本の質については賛否両論ありますが、取り上げられているトピックはまさに​​あなたが焦点を当てているものです.

于 2011-08-29T15:17:46.597 に答える