web-dev-qa-db-ja.com

virtualenvはDjango本番サーバーに推奨されますか?

環境を分離しており、パッケージの新しいリリースを安全にテストできるため、localhostでのアプリのテストには常にvirtualenvを使用しています。

これで、アプリを運用サーバーに展開する必要が生じました。運用サーバーにもvirtualenvを使用する必要があるのか​​、通常のインストールだけで使用するのか疑問に思っています。本番サーバーなので、開発サーバーでテストした正しいバージョンをいつでも使用できます(virtual-envの下)

75
w00d

ウェブサーバーで複数のプロジェクトを実行すると思われる場合は、そのようにします。 2つのプロジェクトがあるとすぐに、pythonパッケージが他のサイトを壊してしまう可能性があります。

47
Kurt

VirtualenvはDjango本番サーバーに推奨されますか?

はい、プロジェクトがシステム環境の特定の側面に依存しないようにし、展開プロセスをより明確で構成可能にします。

ファブリック、pip、virtualenvを使用して、すべてのDjangoプロジェクトをデプロイします。

15

はい、virtualenvを使用して実稼働環境にデプロイする必要があると思います。特に複数のサービスの展開を計画している場合は、物事がはるかに簡単でわかりやすくなります。 DjangoベースのWebサイトまたは他のpythonプロジェクト。各プロジェクトがグローバル環境を汚染することは望ましくありません。python環境彼らのパッケージで。

Virtualenvは、すべての依存関係をきれいに管理するのに役立つと思います。

本番環境を更新するには、次を実行するだけです。

pip -r name_of_your_requirements_file.txt

私は本番環境でvirtualenvsを使用しています。また、uWSGIを使用して、CherokeeをWebサーバーとしてアプリケーションを提供できます。

本番環境でvirtualenvを使用するには、そのパスをPYTHONPATHに追加する必要があります。

たとえば、envのパスが「/ home/www/my_project/env /」の場合、追加するパスは次のようになります。

/home/www/env/lib/python2.7/site-packages/

これはさまざまな方法で設定できますが、manage.pyを使用してFCGIまたはuWSGIインターフェイスを生成する場合は、manage.pyの最上部に次のコードを追加します(残りの前に)。

import os
my_virtualenv_path = "/home/www/my_project/env/lib/python2.7/site-packages/"
# Add it to your PYTHONPATH
os.path.append(my_virtualenv_path)

シェルで次のこともできるように、セットアップにこれを適合させることができます。

export PYTHONPATH:$PYTHONPATH:/home/www/my_project/env/lib/python2.7/site-packages/

また、settings.pyファイルを含むディレクトリをPYTHONPATHに追加する必要があるため、Djangoはそれを検出できます。同様の方法で続行します。

9
AaronO

ほとんどの場合、最初にサーバーをセットアップするときに必要と思われない場合でも、virtualenvを使用するのが最善であることに同意します。つまり、ある種のクラウドサービスを使用し、特定のタスクのために短時間サーバーをスピンアップする場合、virtualenvを使用する意味はわかりません。

3
Max Peterson

Uwsgiがvhostフラグで直接サポートしている場合、完全にサポートされている本番ソリューションであることを示す良い兆候だと思います: http://projects.unbit.it/uwsgi/wiki/VirtualHosting

2
jdi

開発と実稼働の両方の展開にDockerコンテナーを使用することは現在非常に人気があるため、この傾向に従うことを検討している場合、virtualenvはもう必要ありません。

0