簡體   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