2017-06-11 116 views
2

我想用下面的腳本自動化在Django中創建項目。爲什麼下面的Python腳本不使用pip安裝庫?

import os, sys, pip, virtualenv 

directory = sys.argv[1] 
if not os.path.exists(directory): 
    os.makedirs(directory) 

new_dir = os.path.join(os.getcwd(), directory) 
os.chdir(new_dir) 

if not os.path.exists('venv'): 
    os.makedirs('venv') 

venv_dir = os.path.join(os.getcwd(), "venv") 
virtualenv.create_environment(venv_dir) 
activate_script = os.path.join(venv_dir, "bin", "activate_this.py") 
execfile(activate_script, dict(__file__=activate_script)) 

pip.main(["install", "--prefix", venv_dir, "pytz"]) 

最後一行安裝django,但不安裝pytz。它說pytz已經安裝,但是當我激活venv時,從venvimport pytz內啓動python,它不能加載它。我在這裏做錯了什麼?

回答

1

pip.main不在虛擬環境的上下文中執行,而是嘗試在您的系統分發中安裝pytz。這就是爲什麼你會收到它已經安裝的消息。您可以使用subprocess.call來指定要使用哪個點。

import os, sys, virtualenv, subprocess 
directory = sys.argv[1] 
if not os.path.exists(directory): 
    os.makedirs(directory) 

new_dir = os.path.join(os.getcwd(), directory) 
os.chdir(new_dir) 

if not os.path.exists('venv'): 
    os.makedirs('venv') 

venv_dir = os.path.join(os.getcwd(), "venv") 
virtualenv.create_environment(venv_dir) 
subprocess.call(['{}/bin/pip'.format(venv_dir), 'install', 'pytz']) 
+0

謝謝你。現在它工作正常。 – MiniGunnR