2010-11-06 11 views
7

He mirado alrededor de SO, y las respuestas que he encontrado a mi problema no me han permitido resolverlo todavía.Virtualenv sigue cargando paquetes de sitios globales en Windows

Quiero usar entornos virtualenv aislados, pero por una razón u otra, se sigue cargando paquetes virtualenv sitio global, cuando en el caparazón de Django ...

Me trataron de limpiar variables PATH, hasta que sólo c: \ Python26 \ Scripts y c: \ Python26 permanecen. Luego creo mi entorno.

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

Luego, activo el virtualenv. PATH es ahora (VARs irrelevantes desguazados):

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\

Hasta ahora, todo bien. Lanzo pitón ...

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

Vamos a tratar de un módulo Estoy seguro de que está en mi c: \ directorio site-packages de Python.

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

Yay! ¡Sin paquetes de sitios globales! En el siguiente entonces. Desde el símbolo del sistema, escribo:

django-admin.py 

Y funciona! Pero espera ... No he instalado Django todavía. ¿Cómo es esto posible?

Después de esto, se vuelve aún más extraño ... Primero agrego estos a la secuencia de comandos activate.bat de virtualenv para que Django pueda encontrar mi configuración.

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

Ahora lanzan cáscara django-admin.py y

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

¿Cómo es esto posible?

momento de lucidez

Mientras se escribe esto, de repente me entiende. .py es una extensión de archivo junto con mi ejecutable c: \ python26 \ python.exe, ¡en lugar del virtualenv!

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. ¿Alguien tiene alguna idea de cómo acoplar la extensión de archivo .py al ejecutable python de mi Virtualenv en lugar del ejecutable de Python definido por el sistema?

+0

* cómo acoplar la extensión de archivo .py al ejecutable python de mi virtualenv * Ver [¿Por qué virtualenv en Windows asocia los archivos .py/.pyw/.pyo/.pyc con la versión de virtualenv de los ejecutables de Python?] (Http : //stackoverflow.com/q/4879624/95735) y [Asociación temporal de archivos para una única sesión cmd.exe] (http://stackoverflow.com/q/5583024/95735) –

Respuesta

11

Un poco de hack de .bat extra puede arreglar esto fácilmente. Mis adiciones estándar a activate.bat son:

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 %* 

y para desactivar.bate

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

+1 Muchas gracias, didn ' Ya sé sobre ftype antes. – alexandrul

+0

¿Hay algunos \ caracteres adicionales en la línea siguiente "establecer PYTHONPATH =% \ VIRTUAL_ENV%;% \ VIRTUAL_ENV% \ conf;% \ VIRTUAL_ENV% \ apps"? ¿No debería leer: "establecer PYTHONPATH =% VIRTUAL_ENV%;% VIRTUAL_ENV% \ conf;% VIRTUAL_ENV% \ apps"? – Nathan

+1

Además ... En los archivos por lotes de Windows, tendrá que escapar del% de caracteres para los comandos ftype. "ftype Python.File = C: \ tools \ Python27 \ python.exe %% 1 %% *" – Nathan

0

Puede crear un archivo .bat y modificar PATH y PYTHONPATH allí, y luego ejecutar .py desde ese archivo .bat. Algo como esto creo

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

Por supuesto, añadir nada más a la ruta que desea.

0

que tenía el mismo "Acceso denegado" problemas como Dan con la respuesta de m0nonoke en mi instalación de Windows 7 utilizando cmd.exe.

Pero encontré este trabajo en torno al uso de un shell de reemplazo TCC/LE y un archivo de inicio personalizada ...

Bajo directorio de trabajo crear config subdirectorio. En este directorio crear el archivo de inicio de TCC/LE llamados tcstart.btm

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

Ahora crea (copia) de acceso directo TCC/LE en el escritorio y cambiarle el nombre adecuadamente. Abra Propiedades para acceso directo y agréguelo al destino "C: \ django \ config \ tcstart.btm". Es posible que desee establecer Iniciar sesión para algo útil, como C: \ Django

solución que se encuentra en esta guía sobre cómo instalar Django and Windows.

Cuestiones relacionadas