2011-12-03 5 views
1

virtual_vを作成し、requirements.txtファイルから要件をインストールするboostrap.pyスクリプトを作成しようとしています。私のプロジェクトの他の貢献者は、githubからプロジェクトをチェックアウトし、python bootstrap.pyを実行してからsource env/bin/activateを実行して、自分のアプリケーションのインストールを済ませておく必要があります。下記のガイドとして、このページを使用して、私が書いたスクリプトです:http://pypi.python.org/pypi/virtualenv以下`pip:error:実行後にpip install -r requirements.txt`というコマンドでコマンドが実行されない

import virtualenv, textwrap 
output = virtualenv.create_bootstrap_script(textwrap.dedent(""" 
def after_install(options, home_dir): 
    if sys.platform == 'win32': 
     bin = 'Scripts' 
    else: 
     bin = 'bin' 

    subprocess.call([join(home_dir,bin,'pip'),'install -r requirements.txt']) 

""")) 
print output 

は、私は、ブートストラップを作成し、それを実行するために実行していますコマンドです:

以下
python create_bootstrap.py > bootstrap.py 
python bootstrap.py env 

です出力:

New python executable in env/bin/python 
Installing setuptools............done. 
Installing pip...............done. 
Usage: pip COMMAND [OPTIONS] 

pip: error: No command by the name pip install -r requirements.txt 
    (maybe you meant "pip install install -r requirements.txt") 

requirements.txtは次のようになります。

sqlalchemy==0.7 

私が間違ってやっていることについて、別の練習やヒントの提案は参考になります。本当にありがとう!

subprocess.call([join(home_dir,bin,'pip'),'install -r requirements.txt']) 

'install -r requirements.txt'

答えて

3

は、スペースを含む単一の引数として扱われているので、サブプロセスモジュールはpip 'install -r requirements.txt'への呼び出しとしてこれを解釈します。

あなたは個別に各引数を指定することでこの問題を解決することができます

subprocess.call([join(home_dir,bin,'pip'), 'install', '-r', 'requirements.txt']) 
+1

をあなたが呼び出しをサブプロセスにおいしくフォームにコマンドラインに入力し何かを分割する)(shlex.splitを使用することができます。 –