2010-11-06 12 views
7

Mi sono guardato intorno su SO e le risposte che ho trovato sul mio problema non mi hanno ancora permesso di risolverlo.Virtualenv continua a caricare pacchetti di siti globali su Windows

voglio usare ambienti virtualenv isolati, ma per un motivo o un altro, virtualenv mantiene il caricamento di pacchetti del sito a livello mondiale, quando in guscio di Django ...

ho cercato di ripulire le variabili PATH, fino a che solo c: \ Python26 \ Scripts e c: \ Python26 rimangono. Quindi creo il mio ambiente.

virtualenv --distribute --no-site-packages myproject 

Quindi attivare il virtualenv. PATH è ora (Vars irrilevanti demoliti):

PATH=E:\Development\django_projects\myproject\Scripts;C:\Panda3D-1.7.0\python;C:\Panda3D-1.7.0\bin;c:\python26\Scripts; 

PYTHONPATH=C:\Panda3D-1.7.0\

Fin qui, tutto bene. Lancio python ...

>>> import django 
    Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    ImportError: No module named django 

Diciamo solo provare un modulo sono sicuro che è nella mia directory c: \ site-packages pitone.

>>> import BeautifulSoup 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named BeautifulSoup 

Yay! Nessun pacchetto di siti globale! Alla successiva poi. Dal prompt dei comandi, digito:

django-admin.py 

E funziona! Ma aspetta ... Non ho ancora installato Django. Com'è possibile?

Dopo questo, diventa ancora più strano ... Prima li aggiungo allo script activate.bat di virtualenv in modo che Django possa trovare le mie impostazioni.

set PYTHONPATH=E:\Development\django_projects\myproject\ 
set DJANGO_SETTINGS_MODULE=settings.development 

Ora lanciare shell django-admin.py e

In [1]: import BeautifulSoup 
In [2]: BeautifulSoup.__file__ 
Out[2]: 'C:\\Python26\\lib\\site-packages\\BeautifulSoup.pyc' 

Come è possibile?

lampo di intuizione

Durante la digitazione questo, ho improvvisamente capito. .py è un'estensione di file accoppiato con il mio eseguibile c: \ python26 \ python.exe, invece di quello virtuale!

python manage.py 
Traceback (most recent call last): 
    File "manage.py", line 2, in <module> 
    from django.core.management import execute_manager 
ImportError: No module named django.core.management 

Heh. Qualcuno ha qualche idea su come accoppiare l'estensione del file .py all'eseguibile python del virtualenv invece che all'eseguibile python definito dal sistema?

+0

* come accoppiare l'estensione di file .py all'eseguibile python di virtualenv * Vedere [Perché non virtualenv su file associati a .py/.pyw/.pyo/.pyc di Windows con la versione di Python di eseguibili Python?] (Http : //stackoverflow.com/q/4879624/95735) e [Associazione file temporanei per singola sessione cmd.exe] (http://stackoverflow.com/q/5583024/95735) –

risposta

11

Un po 'di hackery extra .bat può risolvere facilmente questo problema. Le mie aggiunte standard per activate.bat sono:

REM custom venv settings 
set PYTHONPATH=%\VIRTUAL_ENV%;%\VIRTUAL_ENV%\conf;%\VIRTUAL_ENV%\apps 
set DJANGO_SETTINGS_MODULE=settings 

ftype Python.File=%VIRTUAL_ENV%\Scripts\python.exe %1 %* 

e da disattivare.bat

REM restore ftype 
ftype Python.File=C:\tools\Python27\python.exe %1 %* 
+0

+1 Grazie mille, non ha so di ftype prima. – alexandrul

+0

Ci sono alcuni caratteri \ nella riga seguente "imposta PYTHONPATH =% \ VIRTUAL_ENV%;% \ VIRTUAL_ENV% \ conf;% \ VIRTUAL_ENV% \ apps"? Non dovrebbe leggere: "imposta PYTHONPATH =% VIRTUAL_ENV%;% VIRTUAL_ENV% \ conf;% VIRTUAL_ENV% \ apps"? – Nathan

+1

Inoltre ... Nei file batch di Windows, è necessario sfuggire ai caratteri% per i comandi ftype. "ftype Python.File = C: \ tools \ Python27 \ python.exe %% 1 %% *" – Nathan

0

È possibile creare un file .bat e modificare PATH e PYTHONPATH e quindi eseguire .py da tale file .bat. Qualcosa del genere penso

set PATH=C:\Python26; python myfile.py

Naturalmente, aggiungere qualsiasi altra cosa al percorso che si desidera.

0

Ho avuto lo stesso "Accesso negato" problemi come Dan con la risposta di m0nonoke sulla mia installazione di Windows 7 utilizzando cmd.exe.

Ma ho trovato questa soluzione utilizzando una shell di sostituzione TCC/LE e un file di avvio personalizzato ...

Sotto la directory di lavoro di creare config sottodirectory. In questa directory creare il file di avvio per TCC/LE chiamato tcstart.btm

@echo off 
rem Override system python binding to handle virtualenvironments 
set .py;.pyc=python.exe 

Ora create (copia) scorciatoia TCC/LE sul desktop e rinominarlo in modo appropriato. Apri Proprietà per collegamento e aggiungi a Target "C: \ django \ config \ tcstart.btm". Probabilmente si desidera impostare Inizia a qualcosa di utile, come C: \ Django

soluzione trovata in questa guida su come installare Django and Windows.

Problemi correlati