2017-06-11 1 views
2

Ich versuche, das Erstellen eines Projekts in Django mit dem folgenden Skript zu automatisieren. Warum installiert das folgende Python-Skript keine Bibliotheken mit 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"]) 

Die letzte Zeile installiert django, aber nicht installiert pytz. Es heißt, dass pytz bereits installiert ist, aber wenn ich die venv aktivieren, starten Sie Python aus dem venv und import pytz, kann es nicht geladen werden. Was mache ich hier falsch?

Antwort

1

pip.main wird nicht im Kontext der virtuellen Umgebung ausgeführt, sondern versucht pytz in Ihrer Systemverteilung zu installieren. Deshalb erhalten Sie die Nachricht, dass es bereits installiert ist. Sie können subprocess.call verwenden, um den zu verwendenden Pip anzugeben.

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

Danke mann. Es funktioniert jetzt gut. – MiniGunnR

Verwandte Themen