繁体   English   中英

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

[英]How to install python packages in virtual environment only with virtualenv bootstrap script?

我想创建一个引导脚本来设置本地环境并在其中安装所有要求。 我一直在按照他们的文档中的描述尝试使用 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 上工作。

您可以通过以下方式强制 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])

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

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

适用于 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中,每 package 一行:

django
django-registration==1.4.3

请参阅: Pip - 需求文件

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

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

之后,我尝试像您之前那样安装django

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

记住操作系统导入:

import os, subprocess

希望对你有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM