python 2.7 => ImportError: нет модуля с именем _io

8

Я решил перейти с Windows на Linux, поэтому установил финальную бета-версию Ubuntu Raring.

К сожалению, у меня проблема с Python.

Я пытался использовать pipсозданный мной virtualenv для установки пакетов из requirements.txtфайла, подобного этому:pip install -r requirements.txt

Во время установки пакета я получил следующую ошибку:

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

Я обнаружил в интернете, что, чтобы избавиться от этого, я должен установить python-devпакет deb:

sudo apt-get install python-dev

Поскольку я установил этот пакет, у меня возникает следующая ошибка при попытке запустить питон:

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

У кого-нибудь есть идея? Я ничего не могу найти в Google, и мне действительно нужно решить эту проблему, чтобы использовать Ubuntu для своей работы ...

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ:

Кажется, мой virtualenv был испорчен по какой-то причине. Я удалил это.

Я пересоздал один и снова выполнил «pip install -r needs.txt», и теперь у меня есть эта ошибка:

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:

gccОшибка выше может быть исправлена путем установки build-essentialпакета.

Вениамин
источник
Вы получаете эту ошибку, когда вы пытаетесь запустить скрипт или pun python period?
Сет
Это было при запуске скрипта. Как видите, я только что отредактировал вопрос, теперь моя проблема немного отличается.
Бенджамин

Ответы:

3

Помимо стандартной библиотеки и сторонних модулей Python также имеет встроенные модули. Они написаны на C и связаны непосредственно в исполняемом файле Python. Вы можете узнать, что это такое:

$ 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работает путем копирования /usr/bin/python2.7в env/bin/python, а затем вставляет ссылки на все стандартные модули библиотеки в env/lib/python2.7/*.py.

Когда вы обновляете системный Python, вы автоматически получаете обновленную стандартную библиотеку во всех ваших virtualenvs (потому что символические ссылки!), Но вы все еще используете старую копию исполняемого файла Python. Это означает, что вы также используете старые версии встроенных модулей.

Некоторые стандартные библиотечные модули зависят от встроенных модулей. И иногда стандартная библиотека Python 2.7. (X + 1) зависит от встроенных модулей, которые также были представлены в Python 2.7. (X + 1). Используя старый virtualenv, вы фактически пытаетесь использовать Python 2.7.x со стандартной библиотекой Python 2.7. (X + 1), и иногда это ломается.

Воссоздание virtualenv является правильным решением.

(Вероятно, достаточно заменить исполняемые файлы bin/pythonand bin/python2.7внутри virtualenv, предполагая, что в обновленной системе Python не появилось никаких новых файлов stdlib.)

Мариус Гедминас
источник
2

Вы должны заменить версию Python в вашем испорченном virtualenv.

Сделай это:

  1. Создать новый Virtualenv

    mkvirtualenv MyNewTestEnv
    
  2. Найдите «python» (в моем случае virtualenvs находятся в домашнем каталоге)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  3. Скопируйте "python" из нового virtualenv в ваш испорченный virtualenv

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

Вот и все. Теперь ваш CorruptedEnv должен быть исправлен.

dh1tw
источник
1

Обратите внимание, я добавляю этот ответ, чтобы вывести вопрос из очереди без ответа.

Как вы предлагаете себе во втором редактировании,

Приведенную выше ошибку gcc можно исправить, установив пакет debian build-essential.

don.joey
источник
0

Вам не нужно удалять виртуальную среду.

Просто следуйте этим шагам. скажем, ваша виртуальная среда зовут "mydev"

1) virtualenv mydev

Приведенная выше команда просто обновляется, не теряя ни одного пакета.

2) за пределами virtualenv, если ваш пункт не работает, то просто "easy_install pip" решит проблему

Gomes
источник