我想创建一个用于设置本地环境并在其中安装所有要求的引导脚本。我一直在尝试使用virtualenv.create_bootstrap_script,如docs中所述。
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 :(得分:2)
您可以通过以下方式强制将pip安装到您的virtualenv中:
subprocess.call(['pip', 'install', '-E', home_dir, 'django'])
此外,将依赖项存储在requirements.txt文件中是一个很好且有用的约定,对于django 1.3来说,它是:
django==1.3
然后在after_install
:
subprocess.call(['pip', 'install', '-E', home_dir, '-r', path_to_req_txt])
答案 1 :(得分:0)
您需要将完全限定的路径传递给virtualenv中的pip
脚本。
subprocess.call([join(home_dir, 'bin', 'pip'),'install','django'])
答案 2 :(得分: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()
只需将您的要求放在requirements.txt
中,每个包装一行:
django
django-registration==1.4.3
答案 3 :(得分:-1)
对我有用的是从新创建的环境访问点。
pip = os.path.join(home_dir, 'bin', 'pip')
之后,我尝试像以前一样安装 django 。
subprocess.call([pip, 'install', 'django'])
请记住 os 导入:
import os, subprocess
希望它适合你。