2011-12-31 15 views
11

Tiene problemas con virtualenv en Windows 7.virtualenv en windows 7 vuelve AssertionError

que corren:

virtualenv _testenv 

Devuelve:

Traceback (most recent call last): 
    File "C:\Python27\Scripts\virtualenv-script.py", line 9, in <module> 
    load_entry_point('virtualenv==1.5.2', 'console_scripts', 'virtualenv')() 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 558, in main 
    prompt=options.prompt) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 647, in create_environment 
    site_packages=site_packages, clear=clear)) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 771, in install_python 
    copy_required_modules(home_dir) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 725, in copy_required_modules 
    dst_filename = change_prefix(filename, dst_prefix) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 710, in change_prefix 
    (filename, prefixes) 
AssertionError: Filename c:\Python27\Lib\os.py does not start with any of these prefixes: ['C:\\Python27'] 

tengo las siguientes variables de entorno:

PYTHONHOME=C:\Python27 
PYTHONPATH=c:\Python27;c:\Python27\Lib 
PYTHONSTARTUP=C:\Users\Larry\.pythonrc 
PATH=%PYTHONHOME%\;%PYTHONHOME%\Scripts;etc 

Instalar ed ActiveState Python:

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on 
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win32 

He actualizado la PYTHONPATH = C: \ python27; C: \ python27 \ Lib Todavía en busca de una solución, he encontrado y se retira AppData/Python *. Reinstalado Python y ahora tienen un error diferente:

C:\xbz>virtualenv _t 
PYTHONHOME is set. You *must* activate the virtualenv before using it 
Overwriting _t\Lib\site.py with new content 
New python executable in _t\Scripts\python2.7.exe 
Not overwriting existing python script _t\Scripts\python.exe (you must use _t\Scripts\python2.7.exe) 
Overwriting _t\Lib\distutils\__init__.py with new content 
Installing setuptools.............. 
    Complete output from command C:\xbz\_t\Scripts\python2.7.exe -c "#!python 
\"\"\"Bootstrap setuptoo... 


" --always-copy -U setuptools: 
    Traceback (most recent call last): 
    File "<string>", line 278, in <module> 
    File "<string>", line 210, in main 
    File "<string>", line 132, in download_setuptools 
    File "C:\Python27\Lib\urllib2.py", line 94, in <module> 
    import httplib 
    File "C:\Python27\Lib\httplib.py", line 71, in <module> 
    import socket 
    File "C:\Python27\Lib\socket.py", line 47, in <module> 
    import _socket 
ImportError: No module named _socket 
---------------------------------------- 
...Installing setuptools...done. 
Traceback (most recent call last): 
    File "C:\Python27\Scripts\virtualenv-script.py", line 9, in <module> 
    load_entry_point('virtualenv==1.5.2', 'console_scripts', 'virtualenv')() 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 558, in main 
    prompt=options.prompt) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 654, in create_environment 
    install_setuptools(py_executable, unzip=unzip_setuptools) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 384, in install_setuptools 
    _install_req(py_executable, unzip) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 360, in _install_req 
    cwd=cwd) 
    File "C:\Python27\lib\site-packages\virtualenv.py", line 624, in call_subprocess 
    % (cmd_desc, proc.returncode)) 
OSError: Command C:\xbz\_t\Scripts\python2.7.exe -c "#!python 
\"\"\"Bootstrap setuptoo... 




" --always-copy -U setuptools failed with error code 1 

Pirateé Lib/socket.py y se inserta:

import sys 
sys.path = ['', 'C:\\Python27\\lib\\site-packages\\dotcloud-0.3.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\dotcloud.cli-0.3.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\flask-0.7dev_20110622-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\werkzeug-0.6.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\gunicorn-0.12.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\wtforms-0.6.3-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\repoze.browserid-0.3-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\paste-1.7.5.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\django_pjax-1.0-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\paramiko-1.7.7.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pycrypto-2.4.1-py2.7-win32.egg', 'C:\\Python27', 'C:\\Python27\\Lib', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\PIL', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\Python27\\lib\\site-packages\\setuptools-0.6c11-py2.7.egg-info', 'C:\\Python27\\Scripts', 'C:\\Python27\\Lib\\site-packages\\django\\bin'] 

Por encima de

import _socket 

La razón era que yo estaba ¡capaz de importar el socket desde el prompt directo de Python! Tan lleno mi camino existente. No he reducido exactamente qué directorio lo hizo feliz. Por lo menos revelará a otra persona por qué estoy obteniendo el error sin eso.

Ideas? Sugerencias? Gracias. :)


Pirateé Lib/socket.py y se inserta:

import sys 
sys.path.append('C:\\Python27\\DLLs') 

Por encima de

import _socket 
+0

Consulte con esta pregunta http: // stackoverflow.com/questions/4527958/python-virtualenv-questions –

+0

Todavía en busca de una solución, encontré y eliminé AppData/Python *. Reinstaló Python y ahora tiene un error diferente. Ver la pregunta original actualizada. –

+0

Encontré una solución que implicaba piratear C: \ Python27 \ Lib \ socket.py. Ver sobre. –

Respuesta

11

intenta establecer PYTHONPATH a PYTHONPATH=C:\Python27;C:\Python27\Lib (C mayúscula al inicio).

Esto se puede hacer en el símbolo del sistema escribiendo set PYTHONPATH=C:\Python27;C:\Python27\Lib.

PYTHONPATH volverá a ser lo que era una vez que se cierre la ventana del símbolo del sistema.

+0

Lo siento pero eso no ayudó. :( –

+0

Lo hice esta vez. :) Gracias :) –

2

Su extraño, pero a partir del mensaje de error

AssertionError: Filename c:\Python27\Lib\os.py does not start with any of these prefixes: ['C:\\Python27'] 

Parece, que espera que el nombre de ruta para el archivo de os.py para iniciar con mayúscula 'C' y el prefijo de verificación de cordura entre mayúsculas y minúsculas.

Como la ruta a la biblioteca se deriva de PYTHONPATH y en su caso la letra de la unidad está en minúscula, parece lógico cambiarla a mayúsculas para resolver el problema.

como

PYTHONPATH=C:\Python27;C:\Python27\Lib 
+0

Tuve este mismo problema. Solo para reiterarlo, debes mirar el mensaje de error y asegurarte de que la/caja/de todas las letras en la configuración de ruta coinciden con el mensaje de error. Además, después de cambiar la configuración de '' PATH'', debe iniciar un nuevo símbolo del sistema antes de que se use la nueva configuración. – hazzey

4

Para el error _socket, cambiar su ruta a pythonpython:

PYTHONPATH=C:\Python27;C:\Python27\Lib;C:\Python27\DLLs 
0

También me topé con este problema en Windows 7. Instalación Mi python27 fue en C: \ Archivos de programa , que obviamente contiene un espacio en el camino. Entonces, en un sistema separado de Windows 7 que no contenía Python, hice una nueva instalación de Python27 en C: \ Python27 (la ruta de instalación predeterminada), seguido de una instalación de herramientas de configuración (para easy_install).

Después, pude instalar virtualenv CLEANLY sin el error de aserción anterior (utilicé easy_install).

Sé que el sistema OP ya está utilizando la ruta predeterminada, pero pensé que podría agregar mi experiencia aquí como una posible solución para ciertos casos específicos.

1

Odio las respuestas de "resumen", pero como acabo de pasar por un problema muy similar, pensé que también publicaría mi solución, que se basa en varias de estas respuestas.

The assert error was caused because I did not have a PYTHONPATH environment variable setup.

The socket error was caused because I did not include the PythonXX\DLLs folder.

La variable de entorno PYTHONPATH completa debe buscar la siguiente manera:

PYTHONPATH=C:\Python27;C:\Python27\Lib;C:\Python27\DLLs 
0

Este problema es probablemente un vestigio de otros sistemas de archivos más sensibles a las mayúsculas.

Solución completa:

  1. Leer el mensaje de error de virtualenv. Recuerde la parte donde dice "no comienza con ninguno de estos prefijos: ['C: \\ Python27']".

  2. Editar PYTHONPATH, o crearlo si no tiene uno (Inicio + Descanso, Configuración avanzada del sistema, Variables de entorno). No debería importar si se trata de una variable de usuario o una variable de sistema, a menos que planee cambiar de cuenta de usuario.

  3. Haga coincidir la caja con el mensaje de error. TANTO la letra de la unidad Y el nombre de la carpeta deben coincidir (presumiblemente también las carpetas intermedias, si no se instaló en C: \ Python27). Puede ignorar la doble barra diagonal inversa, una está bien.

El único cambio que hice para corregir el error fue el siguiente. El cambio debe tener efecto para cualquier nueva sesión de comando/terminal (cierre las ventanas cmd.exe/powershell/etc. abiertas).

  • viejo Estado: PYTHONPATH = C:\PYTHON27;C:\PYTHON27\LIB;C:\PYTHON27\DLLS

  • estado Nuevo: PYTHONPATH = C:\Python27;C:\Python27\LIB;C:\Python27\DLLS

Si tiene cualquier otro artículo en su PYTHONPATH, que también podría cambiar los que son demasiado, pero probablemente no afectará la capacidad de virtualenv para correr.

20

Pregunta de 3 años, pero esperemos que esta respuesta todavía pueda ayudar a alguien.En lugar de establecer las variables de entorno (que misteriosamente no me funcionaron), puede pasar la ruta a su instalación de Python al configurar el entorno virtual. En Windows, tiene que realizar una ruta de acceso a python.exe, pero parece que en Linux/OS X acaba de acceder a la carpeta. Ejemplos:

Windows:

virtualenv -p <PATH TO PYTHON.EXE> venv 

Linux/Mac:

virtualenv -p </user/path/to/python> venv 

Ambos crean un entorno virtual en la subcarpeta "Venv" en el directorio actual.

+0

¡ESTO es lo que lo resolvió! Gracias – hulkinBrain

0

Cambio "virtualenv.py" -> change_prefix con:

def change_prefix(filename, dst_prefix): 
    ... 
prefixes = sorted(prefixes, key=len, reverse=True) 
filename = str(os.path.abspath(filename))[0].lower() + str(os.path.abspath(filename))[1:] 
for src_prefix in prefixes: 
    if filename.startswith(src_prefix): 
     _, relpath = filename.split(src_prefix, 1) 
     if src_prefix != os.sep: # sys.prefix == "/" 
      assert relpath[0] == os.sep 
      relpath = relpath[1:] 
     return join(dst_prefix, relpath) 
assert False, "Filename %s does not start with any of these prefixes: %s" % \ 
    (filename, prefixes) 

    ... 
0

que tenía el mismo error de aserción de una causa poco diferente. El error fue does not start with any of these prefixes: ['C:\\python27'] y nota la "p" minúscula. Los nombres de las carpetas reales usan mayúsculas-P Python27. Todos los prefijos en PTYHONPATH fueron correctos. Sin embargo, ingresé la variable PYTHONHOME como C:\python27 y aunque esto estaba bien para Python, causó el error en virtualenv.

3

He añadido

if is_win:  
     prefixes.append('C:\PYTHON27')  

a virtualenv.py y funciona.

1

Esto es un error ya presentada al equipo de desarrollo de Python: https://github.com/pypa/virtualenv/pull/697

En el mientras tanto ¿por qué no cambiar el nombre de la carpeta de instalación de Python a (ptyhon27) para hacer el trabajo afirmación, o si se siente más cómodo con que acaba de reinstalar Python usando la ubicación alternativa. Funciona sin problemas.

1

Puede intentar lo siguiente (supppose su pitón está en camino global):

python -m virtualenv [foldername] 

Esto funciona para mí, Win 10, virtualenv 15.1.0

lo entiendo de esta video, se ejecutará la lib de python en lugar de llamar a Windows exe.

3

hay problema similar actualmente que muestra error:

AssertionError: Filename C:\Python27\Lib\os.py does not start with any of 
these prefixes: ['C:\\python27'] 

La diferencia está en 'C: \ python27' ser minúscula. Entonces, el problema se manifiesta en que no se puede instalar un nuevo virtualenv o hacer un virtualenvs anidado (lo hacemos para probarlo algunas veces). La causa se encuentra en la conent del PYTHONPATH

PYTHONPATH=C:\Python27;C:\Python27\Lib 

Por alguna razón sys.path en virtualenv.py volverá c: \ python27, pero camino a los módulos requeridos vendrá formar el PYTHONPATH y empezar con 'C: \ Python27 \ Lib ', de ahí el error de aserción.

Para resumir, solo desarma el PYTHONPATH.

+0

Esto me ayudó a resolver el problema. La sugerencia para mí fue que el camino parecía estar bien, pero el caso era diferente. – srodriguez

+0

Solo esto funcionó (usando Cygwin) – slashdottir