2012-04-08 18 views
4

ローカル環境をセットアップし、すべての要件をインストールするためのブートストラップスクリプトを作成します。私は彼らのdocsで説明されているようにvirtualenv.create_bootstrap_scriptで試しています。virtualenvブートストラップスクリプトでのみ仮想環境にpythonパッケージをインストールするには?

import virtualenv 
s = virtualenv.create_bootstrap_script(''' 
import subprocess 
def after_install(options, home_dir): 
    subprocess.call(['pip', 'install', 'django']) 
''') 
open('bootstrap.py','w').write(s) 

結果のbootstrap.pyを実行すると、仮想環境が正しく設定されますが、その後でDjangoをグローバルにインストールしようとします。

このローカル仮想環境にのみDjangoをインストールするブートストラップスクリプトを作成するにはどうすればよいですか。 WindowsとLinuxの両方で動作する必要があります。

答えて

0

virtualenvにあるpipスクリプトへの完全修飾パスを渡す必要があります。あなたがしてvirtualenvのにインストールするには、ピップを強制することができ

subprocess.call([join(home_dir, 'bin', 'pip'),'install','django'])

+1

ありがとうございました。それは './Scripts/pip.exe'なので、Windowsでは動作しません。私は本当にこれを特別なケースにしなければなりませんか?それとも良い方法がありますか? –

+0

私はあなたがこれをしなければならないとは思わない、ピップの増強を有効にするパス変数afaik – skrat

2

:さらに

subprocess.call(['pip', 'install', '-E', home_dir, 'django']) 

は、ジャンゴ1.3のために、requirements.txtファイル内の依存関係を格納するための素晴らしいと便利な慣例であります「をd:あなたのafter_install

django==1.3 

、その後:

subprocess.call(['pip', 'install', '-E', home_dir, '-r', path_to_req_txt]) 
+0

+1有望そうだ。 – delnan

0

WindowsとLinuxの両方で動作するソリューション。これは、ブートストラップスクリプトによってインストールされたpipを使用します。

import virtualenv 
s = ''' 
import subprocess, os 
def after_install(options, home_dir): 
    if os.name == 'posix': 
    subprocess.call([os.path.join(home_dir, 'bin', 'pip'), 'install', '-r', 'requirements.txt']) 
    else: 
    subprocess.call([os.path.join(home_dir, 'Scripts', 'pip.exe'), 'install', '-r', 'requirements.txt']) 
''' 
script = virtualenv.create_bootstrap_script(s, python_version='2.7') 
f = open('bootstrap.py','w') 
f.write(script) 
f.close() 

ただ、すべてのパッケージに1行、requirements.txtに要件を置く:

django 
django-registration==1.4.3 

を参照してください:Pip - Requiremments Files

-1

何私のために働いたことは、新しく作成された環境からピップにアクセスすることです

pip = os.path.join(home_dir, 'bin', 'pip') 

その後、私はあなたが以前に行ったようジャンゴをインストールしよう。

subprocess.call([pip, 'install', 'django']) 

OSインポートを忘れないでください:

import os, subprocess 

はそれがあなたのために働く願っています。

関連する問題