Virtualenvとソースバージョン管理


84

私は最近Djangoプロジェクトを開始しましたが、virtualenvが多くの理由で本当に役立つことにすぐに気付きました。virtualenvとプロジェクトをセットアップしましたが、ソース管理(私の場合はMercurial)にどのファイルを追加する必要があるのか​​疑問に思います。venvフォルダーの下にすべてのファイルを追加する必要がありますか?同僚がクローンを作成して、環境を再度セットアップしなくてもすぐに作業を開始できるようにするにはどうすればよいですか?


18
virtualenvをソース管理下に置くことはお勧めしません-Pythonバージョン、OS、または32/64ビットプラットフォーム間で移植可能ではありません。代わりに、を使用してください~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt。-他の開発者は、セットアップに自分のvirtualenvのが必要になりますが、それは文字通り二つのコマンドですvirtualenv ~/path/to/env~/path/to/env/bin/pip install -r ~/path/to/requirements.txt
AdamKG 2012年

1
親愛なるグーグル、参照してください:stackoverflow.com/a/6012590/82216
sampablokuper 2013年

回答:


106

requirements.txtプロジェクトでコミットする「要件」ファイル(通常)を生成します。

pip freeze > requirements.txt

次に、各開発者は独自のvirtualenvを設定し、以下を実行します。

pip install -r requirements.txt

6

これらの環境の煩わしさはすべて、Python / djangoの開発を行うときによくあることです。私はこれらすべての問題を経験し、いくつかの解決策をテストしました!私がテストしたこと:

  1. ローカルで実行されているプロジェクト
  2. virtualenvで実行されているプロジェクト
  3. VMで実行されているプロジェクト
  4. vagrantを使用してVMで実行されているプロジェクト

私が見つけた最良の解決策は#4でした!私が以前働いていた会社なので、チームの各人は異なるOS、あらゆる種類のWindows、Mac、Linuxを持っており、環境ごとにすべての依存関係をインストールするには時間がかかります。そこで、virtualenvを試してみることにしました。これは本当に良いことです。しかし、それでも各人は自分の環境を設定する必要があります。virtualenvの問題は、すべてのpythonソースがuが作成した環境内にあることです。したがって、これらのファイルをソースバージョン管理にプッシュしません!最善の解決策は#4でした。これはまさに私が必要としていたものであり、VagrantはChefを使用して環境をセットアップするため、レシピをいくつか作成し、vagrantに実行させる必要があります。次に、それらのレシピをSCMにプッシュし、次の人がSCMからファイルを取得してVMをリロードすると、すべての依存関係が自動的にインストールされます。

このテーマについて詳しく説明しているブログ投稿があります。また、githubでDjango Blankプロジェクトを作成しので、vagrantを使用してプロジェクトの開始点にすることができます。

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/(リンクはアクティブではなくなったため、Wayback Machineにリンクされています)

編集

Chris Prattのソリューションも優れていますが、一部のライブラリはすべてのOSにインストールするのがそれほど簡単ではありません。たとえば、Macの多くの人は、MySQLdb-pythonをインストールしようとすると問題が発生します。これは本当に一般的なライブラリですが、チームの全員がこの問題の解決に時間を費やす必要がある場合は、まったく良くありません。


MySQLdb-pythonこれは完全な環境を使用する本当に良い理由ですが、pip / requirements.txtでもこれを達成することはできませんか?
kbuilds 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.