python 2.7 => ImportError: aucun module nommé _io

8

J'ai décidé de passer de Windows à Linux, j'ai donc installé la version bêta finale d'Ubuntu Raring.

Malheureusement, j'ai un problème avec Python.

J'essayais d'utiliser à pippartir d'un virtualenv que j'avais créé, pour installer des packages à partir d'un requirements.txtfichier comme celui-ci:pip install -r requirements.txt

J'ai eu l'erreur suivante lors de l'installation d'un package:

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

J'ai trouvé sur internet que pour m'en débarrasser, je devrais installer le python-devpaquet deb:

sudo apt-get install python-dev

Depuis que j'ai installé ce package, j'ai l'erreur suivante lorsque j'essaie d'exécuter 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

est-ce que quelqu'un a une idée? Je ne trouve rien sur Google et j'ai vraiment besoin de résoudre ce problème afin d'utiliser Ubuntu pour mon travail ...

Merci de votre aide.

ÉDITER:

Il semble que mon virtualenv ait été corrompu pour une raison quelconque. Je l'ai désinstallé.

J'en ai recréé un et j'ai exécuté à nouveau "pip install -r requirements.txt", et maintenant j'ai cette erreur:

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' gccerreur ci-dessus peut être corrigée en installant le build-essentialpackage.

Benjamin
la source
Vous obtenez cette erreur lorsque vous essayez d'exécuter un script ou une période de pun python?
Seth
C'était lors de l'exécution d'un script. Comme vous pouvez le voir, je viens de modifier la question, mon problème est maintenant légèrement différent.
Benjamin

Réponses:

3

En plus de la bibliothèque standard et des modules tiers, Python a également des modules intégrés. Celles-ci sont écrites en C et sont liées directement dans l'exécutable Python. Vous pouvez découvrir à quoi cela ressemble:

$ 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 envfonctionne en copiant /usr/bin/python2.7dans env/bin/pythonet ensuite un lien symbolique tous les modules de la bibliothèque standard dans env/lib/python2.7/*.py.

Lorsque vous mettez à niveau votre système Python, vous obtenez automatiquement la bibliothèque standard mise à jour dans tous vos virtualenvs (parce que les liens symboliques!), Mais vous utilisez toujours l'ancienne copie de l'exécutable Python. Cela signifie que vous utilisez également les anciennes versions des modules intégrés.

Certains modules de bibliothèque standard dépendent de modules intégrés. Et parfois, la bibliothèque standard Python 2.7. (X + 1) dépend des modules intégrés qui ont également été introduits dans Python 2.7. (X + 1). En utilisant un ancien virtualenv, vous essayez en fait d'utiliser Python 2.7.x avec la bibliothèque standard de Python 2.7. (X + 1), et parfois cela casse.

Recréer le virtualenv est la bonne solution.

(Il suffit probablement de remplacer les exécutables bin/pythonet bin/python2.7dans le virtualenv, en supposant qu'aucun nouveau fichier stdlib ne soit apparu dans le système Python mis à jour.)

Marius Gedminas
la source
2

Vous devez remplacer la version python dans votre virtualenv corrompu.

Faites ceci:

  1. Créer un nouveau Virtualenv

    mkvirtualenv MyNewTestEnv
    
  2. Localisez "python" (dans mon cas, les virtualenvs sont situés dans le répertoire personnel)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  3. Copiez "python" du nouveau virtualenv dans votre virtualenv corrompu

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

C'est ça. Maintenant, votre CorruptedEnv devrait être corrigé.

dh1tw
la source
1

Veuillez noter que j'ajoute cette réponse pour retirer la question de la file d'attente sans réponse.

Comme vous le suggérez dans votre deuxième édition,

L'erreur gcc ci-dessus peut être corrigée en installant le paquet Debian essentiel à la construction.

don.joey
la source
0

vous n'avez pas besoin de supprimer l'environnement virtuel.

Suivez simplement ces étapes. disons que le nom de votre environnement virtuel est "mydev"

1) virtualenv mydev

La commande ci-dessus vient de mettre à niveau sans perdre aucun package.

2) en dehors de virtualenv, si votre pip ne fonctionne pas, alors juste "easy_install pip" résoudra le problème

Gomes
la source