¿Por qué no puede `virtualenv` encontrar` pkg_resources`?

Estoy tratando de usar virtualenv en Ubuntu para instalar un entorno de Python virtual local. Cuando ejecuto el comando shell:

$ virtualenv ./virt_python 

pkg_resources una excepción que no puede importar pkg_resources . Pero cuando abro un shell de Python y from pkg_resources import load_entry_point funciona bien. Para referencia, el stacktrace completo está abajo.

 $ virtualenv ./virt_python New python executable in ./virt_python/bin/python Installing setuptools............done. Installing pip....... Complete output from command /home/rpsharp/local/...hon/bin/easy_install /usr/local/lib/pytho...pport/pip-1.1.tar.gz: Traceback (most recent call last): File "/home/rpsharp/local/workspace/invest-natcap.invest-3/virt_python/bin/easy_install", line 5, in  from pkg_resources import load_entry_point ImportError: No module named pkg_resources ---------------------------------------- ...Installing pip...done. Traceback (most recent call last): File "/usr/local/bin/virtualenv", line 9, in  load_entry_point('virtualenv==1.7.1.2', 'console_scripts', 'virtualenv')() File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 928, in main never_download=options.never_download) File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1042, in create_environment install_pip(py_executable, search_dirs=search_dirs, never_download=never_download) File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 640, in install_pip filter_stdout=_filter_setup) File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1006, in call_subprocess % (cmd_desc, proc.returncode)) OSError: Command /home/rpsharp/local/...hon/bin/easy_install /usr/local/lib/pytho...pport/pip-1.1.tar.gz failed with error code 1 

Probé la solución propuesta aquí https://stackoverflow.com/a/10538412/42897 pero no tuvo ningún efecto.

Tuve el mismo problema cuando intenté ejecutar virtualenv, descubrí que virtualenv se instaló en /home/{user}/install/lib/python2.7/site-packages mientras el python apuntaba a / home / {user} / install / bin / virtualenv – deberías saber esto ejecutando

 which virtualenv 

Así que tuve que desinstalar y reinstalar virtualenv

 pip uninstall virtualenv pip install virtualenv 

Esto funcionó para mí.

El problema es que las versiones recientes nunca descargan ni setuptools (distribuir) ni pip y esperan encontrar sus ruedas localmente. Por lo general, virtualenv dice algo así como

  Cannot find a wheel for setuptools Cannot find a wheel for pip 

y falla con el ImportError después de eso. Esto está documentado :

Si no se encuentran distribuciones locales satisfactorias, virtualenv fallará. Virtualenv nunca descargará paquetes.

Es posible que desee verificar si tiene VIRTUALENV_EXTRA_SEARCH_DIR configurado en su entorno o la opción correspondiente en el archivo de configuración de virtualenv y deshabilitarlo.

Para averiguar dónde virtualenv realmente busca los paquetes, puede agregar temporalmente declaraciones de impresión en /usr/local/lib/python2.6/dist-packages/virtualenv.py o algo así como import pdb; pdb.set_trace() import pdb; pdb.set_trace() . La función en cuestión es find_wheels y haces que se vea algo como esto:

  def find_wheels(projects, search_dirs): # … skipping docstring and comments for project in projects: for dirname in search_dirs: print '*** search_dir:', dirname files = glob.glob(os.path.join(dirname, project + '-*.whl')) if files: wheels.append(os.path.abspath(files[0])) break else: logger.fatal('Cannot find a wheel for %s' % (project,)) return wheels 
  1. Compruebe la versión actual de virtualenv. Según lo respondido por el usuario 2676043 en el mismo hilo, virtualenv se instala en /usr/local/lib/python2.7/dist-packages. Así que ejecuta el siguiente comando:

    $ python /usr/local/lib/python2.7/dist-packages/virtualenv.py --version

Le devolverá la versión de virtualenv instalada en el sistema.

  1. Ahora, cambia el archivo ejecutable.

    $ vim /usr/local/bin/virtualenv

Cambia la versión a la que recibiste arriba. Guarda el archivo y funciona sin problemas.