ImportError: Нет модуля с именем _io в Ubuntu 14.04

46

Я только что установил ubuntu 14.04LTS, и я пытаюсь использовать pip, но я получаю следующую трассировку:

(nlmanagement)psychok7@Ultrabook:~/code/work/nlmanagement$ pip freeze
Traceback (most recent call last):
  File "/home/psychok7/code/work/venv/nlmanagement/bin/pip", line 9, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/home/psychok7/code/work/venv/nlmanagement/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 337, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/psychok7/code/work/venv/nlmanagement/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 2279, in load_entry_point
    return ep.load()
  File "/home/psychok7/code/work/venv/nlmanagement/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 1989, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/home/psychok7/code/work/venv/nlmanagement/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 10, in <module>
    from pip.backwardcompat import walk_packages, console_to_str
  File "/home/psychok7/code/work/venv/nlmanagement/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg/pip/backwardcompat.py", line 77, in <module>
    from urllib2 import URLError, HTTPError
  File "/usr/lib/python2.7/urllib2.py", line 94, in <module>
    import httplib
  File "/usr/lib/python2.7/httplib.py", line 79, in <module>
    import mimetools
  File "/usr/lib/python2.7/mimetools.py", line 6, in <module>
    import tempfile
  File "/usr/lib/python2.7/tempfile.py", line 32, in <module>
    import io as _io
  File "/usr/lib/python2.7/io.py", line 51, in <module>
    import _io
ImportError: No module named _io

любые идеи? я пробовал sudo apt-get install python3-pip и sudo apt-get install python-pip

Теги:
pip

7 ответов

52
Лучший ответ

Ваш virtualenv стал коррумпированным из-за различий в системе lib на Python.

Лучший выбор - переустановить свой virtualenv:

$ deactivate
$ rmvirtualenv nlmanagement
$ mkvirtualenv nlmanagement
$ pip install -r requirements.txt
  • 0
    почему у меня есть эти различия? из-за обновления?
  • 0
    @ psychok7 Да, обновление системы, вероятно, заменило некоторые библиотеки.
Показать ещё 7 комментариев
54

У меня была та же проблема. Это произошло в Ubuntu - 14.04 и виртуальной среде Python версии - 2.7.3

Проведя день в отладке, разместив здесь свой ответ, надейтесь, что это поможет будущим посетителям.

Я обнаружил, что io.py вызывает модуль _io. Я думаю, что модуль _io является внутренним для интерпретатора, поэтому необходимо только заменить двоичный файл python в среде с более новой версией.

(В моем случае Cloudera Manager 5.x Agent virtualenv на ubuntu 14.04 использовал интерпретатор python 2.7.3, заменил его на 2.7.6.

echo "Using " && python2.7 --version
mv myenv/bin/python myenv/bin/python.bak;
cp `which python2.7` myenv/bin/python

Когда создается новый virtualenv, он использует обновленную бинарную систему python из системы. Следовательно, это объясняет принятый ответ в потоке.

  • 2
    Я думал, что весь смысл virtualenv состоит в том, чтобы ограждать питон и библиотеки от ОС. Почему изменение Python системы повлияет на что-нибудь?
  • 0
    После этого я получаю «ImportError: нет модуля с именем _sysconfigdata_nd» из-за bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1115466
Показать ещё 6 комментариев
21

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

Просто выполните следующие действия.

  • Скажем, ваше имя виртуальной среды "mydev", и вы используете virtualenvwrapper, do

    cd $WORKON_HOME
    virtualenv mydev
    

    Приведенная выше команда просто обновляет ссылку на исполняемый файл python без потери какого-либо пакета. Без virtualenvwrapper, $WORKON_HOME не может быть определен; то вам нужно перейти в родительский каталог virtualenv.

  • за пределами virtualenv, если ваш пип не работает, просто

    easy_install pip
    

    решит проблему.

  • 2
    При попытке № 1 я получаю 'OSError: Command python -c "#! Python \" \ "\" Bootstra ... sys.argv [1:])'
  • 0
    твой пункт работает
Показать ещё 1 комментарий
3

После обновления моего сервера ubuntu до 14.04, у меня также есть такая проблема при выполнении pip

ImportError: No module named _io

Затем я обнаружил, что просто переустановить virtualenv может решить эту проблему!

sudo pip install virtualenv --upgrade

2

Одна из причин этого - плохой "пип". Видеть: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1373254

И/или это может быть проблема с virtualenv: https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1115466 Где рекомендуемое обходное решение:

  cd /usr/lib/python2.7
  ln -s plat-x86_64-linux-gnu/_sysconfigdata_nd.py .
0

Если вы установили разные версии python. Вы должны ссылаться на свой python

virtualenv -p /usr/bin/python2.7 myenv

или

virtualenv -p /usr/bin/python3.x myenv
0

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

Сделайте это:

  • Создайте новый Virtualenv

    mkvirtualenv MyNewTestEnv
    
  • Найдите "python" (в моем случае виртуальные узлы находятся в домашнем каталоге)

    cd ~/.virtualenvs/MyNewTestEnv/bin
    
  • Скопируйте "python" из нового virtualenv в поврежденный virtualenv

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

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

  • 0
    что такое mkvirtualenv ? Я не могу найти этот пакет в Ubuntu
  • 1
    Оформить заказ Virtualenvwrapper!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню