python 2.7 => ImportError: nessun modulo chiamato _io


8

Ho deciso di passare da Windows a Linux, quindi ho installato la beta finale di Ubuntu Raring.

Sfortunatamente ho un problema con Python.

Stavo cercando di utilizzare pipda un virtualenv che ho creato, per installare pacchetti da un requirements.txtfile come questo:pip install -r requirements.txt

Ho ricevuto il seguente errore durante l'installazione di un pacchetto:

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

Ho scoperto su Internet che per sbarazzarmi di questo, dovrei installare il python-devpacchetto deb:

sudo apt-get install python-dev

Da quando ho installato questo pacchetto, ho il seguente errore quando provo ad eseguire 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

Qualcuno ha un'idea? Non riesco a trovare nulla su Google e ho davvero bisogno di risolvere questo problema per utilizzare Ubuntu per il mio lavoro ...

Grazie per l'aiuto.

MODIFICARE:

Sembra che il mio virtualenv sia stato corrotto per qualche motivo. L'ho disinstallato.

Ne ho ricreato uno ed eseguito di nuovo "pip install -r Requisiti.txt" e ora ho questo errore:

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:

L' gccerrore sopra può essere corretto installando il build-essentialpacchetto.


Questo errore viene visualizzato quando si tenta di eseguire uno script o un periodo di python?
Seth,

È stato quando si esegue una sceneggiatura. Come puoi vedere ho appena modificato la domanda, il mio problema ora è leggermente diverso.
Benjamin,

Risposte:


3

Oltre alla libreria standard e ai moduli di terze parti, Python ha anche moduli integrati. Questi sono scritti in C e sono collegati direttamente nell'eseguibile Python. Puoi scoprire come sono:

$ 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 envlavora copiando /usr/bin/python2.7in env/bin/python, e quindi un collegamento simbolico tutti i moduli della libreria standard in env/lib/python2.7/*.py.

Quando aggiorni il tuo sistema Python, ottieni automaticamente la libreria standard aggiornata in tutti i tuoi virtualenv (perché collegamenti simbolici!), Ma stai ancora usando la vecchia copia dell'eseguibile Python. Questo significa che stai usando anche le vecchie versioni dei moduli integrati.

Alcuni moduli di libreria standard dipendono dai moduli integrati. E a volte la libreria standard di Python 2.7. (X + 1) dipende dai moduli integrati introdotti anche in Python 2.7. (X + 1). Usando un vecchio virtualenv in effetti stai provando a usare Python 2.7.x con la libreria standard di Python 2.7. (X + 1), e talvolta questo si interrompe.

Ricreare virtualenv è la soluzione corretta.

(Probabilmente è sufficiente sostituire i file eseguibili bin/pythone bin/python2.7all'interno di virtualenv, supponendo che nessun nuovo file stdlib sia apparso nel sistema aggiornato Python.)


2

Devi sostituire la versione di Python nel tuo virtualenv corrotto.

Fai questo:

  1. Crea un nuovo Virtualenv

    mkvirtualenv MyNewTestEnv
    
  2. Trova "python" (nel mio caso i virtualenv si trovano nella home directory)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  3. Copia "python" dal nuovo virtualenv nel tuo virtualenv corrotto

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

Questo è tutto. Ora CorruptedEnv dovrebbe essere corretto.


1

Si noti che aggiungo questa risposta per estrarre la domanda dalla coda senza risposta.

Come ti suggerisci nella seconda modifica,

L'errore gcc sopra può essere corretto installando il pacchetto debian build-essential.


0

non è necessario eliminare l'ambiente virtuale.

Segui questi passaggi. supponiamo che il nome del tuo ambiente virtuale sia "mydev"

1) virtualenv mydev

Il comando sopra semplicemente aggiorna senza perdere alcun pacchetto.

2) al di fuori di virtualenv, se il tuo pip non funziona, solo "easy_install pip" risolverà il problema

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.