python 2.7 = ImportError: Nenhum módulo chamado _io

8

Eu decidi mudar do Windows para o Linux, então eu instalei o beta final do Ubuntu Raring.

Infelizmente, tenho um problema com o Python.

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

Recebi o seguinte erro durante a instalação de um pacote:

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

Encontrei na internet que, para me livrar disso, devo instalar o pacote python-dev 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 uma ideia? Não consigo encontrar nada no Google, e realmente preciso resolver esse problema para usar o Ubuntu no meu trabalho ...

Obrigado pela sua ajuda.

EDITAR:

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

Eu recriou um, e executei novamente o "pip install -r requirements.txt", e agora eu 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 erro gcc acima pode ser corrigido instalando o pacote build-essential .

    
por Benjamin 14.04.2013 / 17:47

4 respostas

3

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

$ 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 env funciona copiando /usr/bin/python2.7 para env/bin/python e, em seguida, ligando simbolicamente todos os módulos da biblioteca padrão em env/lib/python2.7/*.py .

Quando você atualiza seu 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 incorporados.

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

Recriar o virtualenv é a solução correta.

(É provavelmente suficiente substituir os executáveis bin/python e bin/python2.7 dentro do virtualenv, assumindo que nenhum novo arquivo stdlib apareceu no sistema atualizado Python.)

    
por Marius Gedminas 16.09.2013 / 15:15
2

Você tem que substituir a versão do python em 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. Agora seu CorruptedEnv deve ser corrigido.

    
por user2292376 21.02.2015 / 23:47
1

Por favor, note que adiciono esta resposta para tirar a questão da fila não respondida.

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

The gcc error above can be fixed by installing the build-essential debian package.

    
por don.joey 28.08.2013 / 20:56
0

você não precisa excluir o ambiente virtual.

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

1) virtualenv mydev

O comando acima apenas atualiza sem perder nenhum pacote.

2) fora virtualenv, se o seu pip não está funcionando, então apenas "easy_install pip" irá resolver o problema

    
por Gomes 02.05.2014 / 16:19