我正在尝试创建一个boostrap.py脚本,该脚本将创建virtualenv并从requirements.txt文件安装需求。我的项目的其他贡献者应该能够从github签出项目并运行python bootstrap.py
然后source env/bin/activate
来安装我的应用程序。以下是我编写的脚本,使用此页面作为指南:http://pypi.python.org/pypi/virtualenv
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
对于我所做错的不同做法或提示的任何建议都会有所帮助。非常感谢!
答案 0 :(得分:3)
在
subprocess.call([join(home_dir,bin,'pip'),'install -r requirements.txt'])
'install -r requirements.txt'
被视为包含空格的单个参数,因此子进程模块将此解释为对pip 'install -r requirements.txt'
的调用。
您可以通过单独指定每个参数来解决此问题:
subprocess.call([join(home_dir,bin,'pip'), 'install', '-r', 'requirements.txt'])