python 2.7 => ImportError: ningún módulo llamado _io


8

Decidí cambiar de Windows a Linux, así que instalé Ubuntu Raring beta final.

Lamentablemente tengo un problema con Python.

Estaba tratando de usar pipdesde un virtualenv que creé, para instalar paquetes desde un requirements.txtarchivo como este:pip install -r requirements.txt

Recibí el siguiente error mientras se instalaba un paquete:

buildutils/initlibzmq.c:10:20: fatal error: Python.h: No such file or directory

compilation terminated.

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

Encontré en internet que para deshacerme de esto, debería instalar el python-devpaquete deb:

sudo apt-get install python-dev

Desde que instalé este paquete, tengo el siguiente error cuando intento ejecutar un python:

file: "ImportError: No module named _io".

I use this python from the virtualenv: 
Python 2.7.4rc1 (default, Mar 30 2013, 15:39:28) 
[GCC 4.7.2] on linux2

¿Alguien tiene alguna idea? No puedo encontrar nada en Google, y realmente necesito resolver este problema para usar Ubuntu para mi trabajo ...

Gracias por tu ayuda.

EDITAR:

Parece que mi virtualenv fue corrompido por alguna razón. Lo desinstalé

Volví a crear uno y realicé el "pip install -r require.txt" nuevamente, y ahora tengo este error:

Warning: failed to configure libzmq:

/bin/sh: 1: ./configure: not found



staging platform.hpp from: buildutils/include_linux



************************************************

Using bundled libzmq

************************************************

building 'zmq.libzmq' extension

creating build/temp.linux-x86_64-2.7/buildutils

creating build/temp.linux-x86_64-2.7/bundled

creating build/temp.linux-x86_64-2.7/bundled/zeromq

creating build/temp.linux-x86_64-2.7/bundled/zeromq/src

x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibundled/zeromq/include -Ibundled -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -c buildutils/initlibzmq.c -o build/temp.linux-x86_64-2.7/buildutils/initlibzmq.o

x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibundled/zeromq/include -Ibundled -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -c bundled/zeromq/src/ipc_address.cpp -o build/temp.linux-x86_64-2.7/bundled/zeromq/src/ipc_address.o

x86_64-linux-gnu-gcc: error trying to exec 'cc1plus': execvp: No such file or directory

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

EDIT2:

El gccerror anterior se puede solucionar instalando el build-essentialpaquete.


¿Recibe este error cuando intenta ejecutar un script o un período de juego de palabras?
Seth

Fue cuando se ejecuta un script. Como puede ver, acabo de editar la pregunta, mi problema ahora es ligeramente diferente.
Benjamin

Respuestas:


3

Además de la biblioteca estándar y los módulos de terceros, Python también tiene módulos integrados. Estos están escritos en C y están vinculados directamente en el ejecutable de Python. Puedes averiguar cómo son estos:

$ python
Python 2.7.4 (default, Apr 19 2013, 18:28:01) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.builtin_module_names
('__builtin__', '__main__', '_ast', '_bisect', '_codecs', '_collections', '_functools', '_heapq', '_io', '_locale', '_md5', '_random', '_sha', '_sha256', '_sha512', '_socket', '_sre', '_struct', '_symtable', '_warnings', '_weakref', 'array', 'binascii', 'cPickle', 'cStringIO', 'cmath', 'errno', 'exceptions', 'fcntl', 'gc', 'grp', 'imp', 'itertools', 'marshal', 'math', 'operator', 'posix', 'pwd', 'select', 'signal', 'spwd', 'strop', 'sys', 'syslog', 'thread', 'time', 'unicodedata', 'xxsubtype', 'zipimport', 'zlib')

virtualenv envfunciona mediante la copia /usr/bin/python2.7en env/bin/python, y luego enlazar simbólicamente todos los módulos de la biblioteca estándar en env/lib/python2.7/*.py.

Cuando actualiza su sistema Python, obtiene automáticamente la biblioteca estándar actualizada en todos sus virtualenvs (¡porque enlaces simbólicos!), Pero todavía está usando la copia anterior del ejecutable de Python. Esto significa que también está utilizando las versiones anteriores de los módulos integrados.

Algunos módulos de biblioteca estándar dependen de módulos integrados. Y a veces la biblioteca estándar Python 2.7. (X + 1) depende de los módulos incorporados que también se introdujeron en Python 2.7. (X + 1). Al usar un viejo virtualenv, en realidad está tratando de usar Python 2.7.x con la biblioteca estándar de Python 2.7. (X + 1), y a veces esto se rompe.

Volver a crear el virtualenv es la solución correcta.

(Probablemente sea suficiente para reemplazar los archivos ejecutables bin/pythony bin/python2.7dentro del virtualenv, suponiendo que no aparecieron nuevos archivos stdlib en el sistema actualizado Python).


2

Tienes que reemplazar la versión de Python en tu virtualenv corrupto.

Hacer esto:

  1. Crea un nuevo Virtualenv

    mkvirtualenv MyNewTestEnv
    
  2. Localice "python" (en mi caso, los virtualenvs se encuentran en el directorio de inicio)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  3. Copie "python" del nuevo virtualenv en su virtualenv corrupto

    cp ~/.virtualenvs/MyNewTestEnv/bin/python ~/.virtualenvs/<yourCorruptedEnv>/bin
    

Eso es. Ahora su CorruptedEnv debería estar reparado.


1

Tenga en cuenta que agrego esta respuesta para sacar la pregunta de la cola sin respuesta.

Como te sugieres en tu segunda edición,

El error de gcc anterior se puede solucionar instalando el paquete debian build-essential.


0

No necesita eliminar el entorno virtual.

Solo sigue estos pasos. supongamos que el nombre de su entorno virtual es "mydev"

1) virtualenv mydev

El comando anterior solo se actualiza sin perder ningún paquete.

2) fuera de virtualenv, si su pip no funciona, entonces solo "easy_install pip" resolverá el problema

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.