2012-04-08 71 views
4

我想創建一個引導腳本來設置本地環境並在其中安裝所有需求。我一直在嘗試使用virtualenv.create_bootstrap_script,如docs中所述。如何使用virtualenv引導腳本在虛擬環境中安裝python軟件包?

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

您需要將完全限定路徑傳遞給虛擬環境中的pip腳本。

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

+1

謝謝。這在Windows下不起作用,因爲它會是'./Scripts/pip.exe'。我真的必須爲此做一個特例嗎?或者,還有更好的方法? – 2012-04-08 12:25:17

+0

我不認爲你必須這樣做,pip的激活增強PATH變量afaik – skrat 2012-04-08 14:02:04

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]) 
+0

+1看起來很有前途。 – delnan 2012-04-08 19:25:53

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

-1

什麼工作對我來說是從新創建環境中訪問PIP

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

在這之後,我嘗試安裝Django的像前面那樣。

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

記住OS進口:

import os, subprocess 

希望它爲你工作。

相關問題