4

我想创建一个引导脚本来设置本地环境并在其中安装所有要求。我一直在尝试使用 virtualenv.create_bootstrap_script,如他们的文档中所述。

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

4 回答 4

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])
于 2012-04-08T14:05:09.243 回答
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 - 需求文件

于 2013-02-15T14:05:15.757 回答
0

您需要将完全限定的路径传递给pip您的 virtualenv 中的脚本。

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

于 2012-04-08T11:18:37.093 回答
-1

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

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

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

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

记住os导入:

import os, subprocess

希望对你有效。

于 2015-01-19T22:02:08.080 回答