タイトルが尋ねるように、Linux FHS に従って、Linux オペレーティング システム上で Python 仮想環境を保存するための技術的に適切な場所はどこですか?
明確な答えを可能にする別の方法を述べます:Python仮想環境の場所を提供しているデータファイルから分離することは「技術的に正しい」ですか?
注:仮想環境にはライブラリ、バイナリ、ヘッダー ファイル、およびスクリプトが含まれているため、この質問は、私が見つけることができる最も近い、既に尋ねられた質問とは異なります。
さらに厄介なことに、私はインターネットでアクセスできるサービスをサポートするコードを書く傾向があります。ただし、これは、サービスの消費者が同じサーバー上の他のプロセスであるシナリオと私のニーズを大幅に区別するものではないと思います。コメントへの応答に「web dev」風のコンテンツが含まれている場合に備えて、この詳細について言及しています。
参考までに、Linux FHS の定義として次のドキュメントを使用しています: http://www.pathname.com/fhs/pub/fhs-2.3.html
人気のある virtualenv-wrapper スクリプトが正しいアクションを示唆しているとは思えません。デフォルトでは、ユーザーのホーム ディレクトリに仮想環境を保存するためです。これは、ディレクトリがユーザー固有のファイル用であるという暗黙の概念、および「プログラムはこの場所に依存してはならない」という声明に違反しています。
/usr
ファイル システムのルート レベルから、 (共有可能で読み取り専用のデータ) または/srv
(このシステムが提供するサービスのデータ)に傾いていますが、これをさらに決定するのに苦労しています。
頼りになるリバース プロキシの決定に私が従うとしたら、それは/usr
. Nginx は通常、/usr/share/nginx または /usr/local/nginx に配置されるようにパッケージ化されていますが、FHS によると、/usr/ は読み取り専用でマウントされることになっています。開発が非常にゆっくりと行われた単一のプロジェクトに取り組んだことがなく、「読み取り専用としてアンマウント/書き込みで再マウント、アンマウント/読み取り専用として再マウント」が努力する価値があると見なされたため、これは奇妙です。
/srv
は別の可能な場所ですが、「特定のサービスのデータ ファイルの場所」として示されていますが、Python 仮想環境は、サービスを提供するライブラリとバイナリに重点を置いています (この区別がなければ、.so
ファイルも srv にあります)。 . また、同じ要件を持つ複数のサービスが仮想環境を共有する可能性があり、これは説明の「特定の」詳細に違反します。
正しい場所を選択するのが難しいのは、仮想環境が「環境」であり、バイナリとライブラリの両方で構成されているためだと思います (ほとんどそれ自体の小さな階層のようなものです) /usr
。
virtual-env/
├── bin ~= /usr/local : "for use by the system administrator when installing software locally"
├── include ~= /usr/include : "Header files included by C programs"
├── lib ~= /usr/lib : "Libraries for programming and packages"
└── share ~= /usr/local
私の仮定と考えを述べて、Nginx が Python アプリケーションのリバース プロキシとして機能する一般的なシナリオを考えてみましょう。仮想環境とソース コード (application.py など) を、より頻繁に変更されるファイル (「静的」アセット、画像、css など) に/usr/local/service_name/
使用する場合に配置するのは正しいですか?/srv
編集:明確にするために:virtualenvを使用する理由と方法を知っています。プロジェクトのレイアウトや開発環境での作業について、私は決して混乱していません。