python 2.7 => ImportError: nenhum módulo chamado _io

8

Decidi mudar do Windows para o Linux, então instalei o Ubuntu Raring beta final.

Infelizmente eu tenho um problema em Python.

Eu estava tentando usar pipde um virtualenv que criei para instalar pacotes de um requirements.txtarquivo como este:pip install -r requirements.txt

Eu recebi o seguinte erro enquanto um pacote estava sendo instalado:

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

Achei na internet que, para me livrar disso, eu deveria instalar o python-devpacote deb:

sudo apt-get install python-dev

Desde que instalei este pacote, tenho o seguinte erro ao tentar executar um 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

Alguém tem alguma ideia? Não consigo encontrar nada no Google, e realmente preciso resolver esse problema para usar o Ubuntu no meu trabalho ...

Obrigado pela ajuda.

EDITAR:

Parece que meu virtualenv foi corrompido por algum motivo. Eu o desinstalei.

Recriei um e executei o "pip install -r requirements.txt" novamente e agora tenho este erro:

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:

O gccerro acima pode ser corrigido instalando o build-essentialpacote.

Benjamin
fonte
Você recebe esse erro ao tentar executar um script ou período de pun python?
Seth
Foi ao executar um script. Como você pode ver, acabei de editar a pergunta, meu problema agora é um pouco diferente.
Benjamin

Respostas:

3

Além da biblioteca padrão e dos módulos de terceiros, o Python também possui módulos internos. Eles são escritos em C e vinculados diretamente no executável do Python. Você pode descobrir como são estes:

$ 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 copiando e, /usr/bin/python2.7em env/bin/pythonseguida, vinculando todos os módulos de biblioteca padrão env/lib/python2.7/*.py.

Quando você atualiza o sistema Python, você obtém automaticamente a biblioteca padrão atualizada em todos os seus virtualenvs (porque links simbólicos!), Mas ainda está usando a cópia antiga do executável Python. Isso significa que você também está usando as versões antigas dos módulos internos.

Alguns módulos de biblioteca padrão dependem dos módulos internos. E às vezes a biblioteca padrão do Python 2.7. (X + 1) depende dos módulos internos que foram introduzidos no Python 2.7. (X + 1) também. Usando um virtualenv antigo, você está realmente tentando usar o Python 2.7.x com a biblioteca padrão do Python 2.7. (X + 1), e às vezes isso é interrompido.

Recriar o virtualenv é a solução correta.

(Provavelmente é suficiente substituir os executáveis bin/pythone bin/python2.7dentro do virtualenv, supondo que nenhum novo arquivo stdlib apareça no sistema atualizado Python.)

Marius Gedminas
fonte
2

Você precisa substituir a versão python no seu virtualenv corrompido.

Faça isso:

  1. Crie um novo Virtualenv

    mkvirtualenv MyNewTestEnv
    
  2. Localize "python" (no meu caso, os virtualenvs estão localizados no diretório inicial)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  3. Copie "python" do novo virtualenv para o seu virtualenv corrompido

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

É isso aí. Agora seu CorruptedEnv deve ser corrigido.

dh1tw
fonte
1

Observe que eu adiciono esta resposta para tirar a pergunta da fila sem resposta.

Como você sugere em sua segunda edição,

O erro gcc acima pode ser corrigido instalando o pacote debian essencial da construção.

don.joey
fonte
0

você não precisa excluir o ambiente virtual.

Basta seguir estes passos. digamos que seu nome de ambiente virtual seja "mydev"

1) virtualenv mydev

O comando acima apenas atualiza sem perder nenhum pacote.

2) fora do virtualenv, se o seu pip não estiver funcionando, apenas "easy_install pip" resolverá o problema

Gomes
fonte