如何使用virtualenv引导脚本在虚拟环境中安装python包?

时间:2012-04-08 11:07:07

标签: python deployment virtualenv

我想创建一个用于设置本地环境并在其中安装所有要求的引导脚本。我一直在尝试使用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。

4 个答案:

答案 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

请参阅:Pip - Requiremments Files

答案 3 :(得分:-1)

对我有用的是从新创建的环境访问

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

之后,我尝试像以前一样安装 django

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

请记住 os 导入:

import os, subprocess

希望它适合你。