virtualenv en windows 7 devuelve AssertionError

Teniendo problemas con virtualenv en Windows 7.

Corro:

virtualenv _testenv 

Vuelve:

 Traceback (most recent call last): File "C:\Python27\Scripts\virtualenv-script.py", line 9, in  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 

ActiveState Python instalado:

 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 

Actualicé PYTHONPATH = C: \ Python27; C: \ Python27 \ Lib Todavía buscando una solución, encontré y eliminé AppData / Python *. Reinstalado Python y ahora tiene 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 "", line 278, in  File "", line 210, in main File "", line 132, in download_setuptools File "C:\Python27\Lib\urllib2.py", line 94, in  import httplib File "C:\Python27\Lib\httplib.py", line 71, in  import socket File "C:\Python27\Lib\socket.py", line 47, in  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  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 

He hackeado Lib / socket.py e insertado:

 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'] 

Encima

 import _socket 

El motivo fue que pude importar socket desde el indicador de python directo. Así rellena mi camino existente. No he reducido exactamente qué directorio lo hizo feliz. Al menos le revelará a otra persona por qué me estoy equivocando sin eso.

Ideas? Sugerencias? Gracias. 🙂


He hackeado Lib / socket.py e insertado:

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

Encima

 import _socket 

Pregunta de 3 años, pero espero que esta respuesta todavía pueda ayudar a alguien. En lugar de configurar 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 ir a python.exe, pero parece que en Linux / OS X solo tiene que ir a la carpeta. Ejemplos:

Windows:

 virtualenv -p  venv 

Linux / Mac:

 virtualenv -p  venv 

Ambos crean un entorno virtual en la subcarpeta “venv” en el directorio actual.

Intente establecer PYTHONPATH en 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 fue una vez que se cerró la ventana de símbolo del sistema.

Para el error _socket, cambie su ruta de pythonpython a:

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

Hay un 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’ en minúsculas. Por lo tanto, el problema se manifiesta en que no se puede instalar un nuevo virtualenv o hacer un virtualenv nesteds (a veces lo hacemos para probar). La causa está en el contenido de PYTHONPATH.

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

Por alguna razón, sys.path en virtualenv.py devolverá c: \ python27, pero la ruta a los módulos requeridos vendrá desde PYTHONPATH y comenzará con ‘C: \ Python27 \ Lib’, de ahí el error de aserción.

Larga historia corta, simplemente desarmar el PYTHONPATH .

Yo he añadido

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

a virtualenv.py y funciona.

Puede intentar lo siguiente (suponga que su python está en la ruta global):

 python -m virtualenv [foldername] 

Esto funciona para mí, Win 10, virtualenv 15.1.0

Lo obtengo de este video , excitará el lib de python en lugar de llamar a windows exe.

Es extraño pero 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 la ruta del archivo os.py comience con mayúscula ‘C’ y que la comprobación de os.py del prefijo sea sensible a 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úsculas, parece lógico cambiarla a mayúsculas para resolver el problema.

me gusta

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

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

El error de confirmación se debió a que no tenía una configuración de variable de entorno PYTHONPATH .

Se produjo el error de socket porque no incluí la carpeta PythonXX \ DLLs.

La variable de entorno PYTHONPATH completa debe tener el siguiente aspecto:

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

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

Mientras tanto, ¿por qué no simplemente cambiar el nombre de la carpeta de instalación de Python a (ptyhon27) para que funcione la afirmación, o si se siente más cómodo con eso, simplemente reinstale Python utilizando la ubicación alternativa? Funciona sin problemas.

También me encontré con este problema en Windows 7. Mi instalación de Python27 estaba bajo C: \ Archivos de progtwig, que obviamente contiene un espacio en la ruta. Entonces, en un sistema Windows 7 separado que no contenía Python, realicé una instalación nueva de Python27 en C: \ Python27 (la ruta de instalación predeterminada), seguida de una instalación de setuptools (para easy_install).

Luego, pude instalar virtualenv CLEANLY sin el error de confirmación anterior (utilicé easy_install).

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

Este problema es presumiblemente una resaca de otros sistemas de archivos más sensibles a las mayúsculas y minúsculas.

Solución completa:

  1. Lea el mensaje de error de virtualenv. Recuerde que la parte donde dice “no comienza con ninguno de estos prefijos: [‘C: \\ Python27’]”.

  2. Edite PYTHONPATH, o créelo si no tiene uno (Inicio + Interrupción, Configuración avanzada del sistema, Variables de entorno). No importa si se trata de una variable de usuario o de un sistema, a menos que planee cambiar de cuenta de usuario.

  3. Haga que el caso coincida con el mensaje de error. TANTO la letra de la unidad Y el nombre de la carpeta deben coincidir (supuestamente también las carpetas intermedias, si no se instaló en C: \ Python27). Puedes ignorar la doble barra invertida, uno está bien.

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

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

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

Si tiene otros elementos en su PYTHONPATH, también puede cambiarlos, pero probablemente no afectará la capacidad de ejecución de virtualenv.

Cambie “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) ... 

Tuve el mismo error de aserción por una causa ligeramente diferente. El error fue does not start with any of these prefixes: ['C:\\python27'] y note la “p” minúscula. Todos los nombres de las carpetas reales usan mayúscula-P Python27. Todos los prefijos en PTYHONPATH eran correctos. Sin embargo, había ingresado la variable PYTHONHOME como C:\python27 y aunque esto estaba bien para Python, causó el error en virtualenv.