it-roy-ru.com

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

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

(nlmanagement)[email protected]:~/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

50
psychok7

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

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

$ deactivate
$ rmvirtualenv nlmanagement
$ mkvirtualenv nlmanagement
$ pip install -r requirements.txt
50
Yuval Adam

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

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

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

(В моем случае в Virtualenv агента Cloudera Manager 5.x на 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 из системы. Следовательно, это объясняет принятый ответ в ветке.

55
Thamme Gowda

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

Просто следуйте этим шагам. 

  1. Допустим, ваша виртуальная среда называется «mydev» и вы используете virtualenvwrapper, сделайте 

    cd $WORKON_HOME
    virtualenv mydev
    

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

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

    easy_install pip
    

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

22
Gomes

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

ImportError: No module named _io

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

Sudo pip install virtualenv --upgrade

3
kakashi

Одной из причин этого является плохой «пункт». Смотрите: 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 .
2
Bryce

Вы должны заменить версию 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 должен быть исправлен.

0
dh1tw

Этот обходной путь применяется к SuSE 12.2 Скачал python и установил его с помощью ./configure и сделал install to defult/usr/local folder

Установлен пип и виртуленв 

При попытке создать виртуальную среду Python

*linux-t69c:/nkadic # virtualenv -p python venv2*
**ImportError: No module named _struct**
or (if manually setting PYTHONPATH)
**ImportError: No module named _io**

Вот обходной путь: 

Проверьте стандартный sys.path python (не изменяйте PYTHONPATH по умолчанию)

проверьте, есть ли библиотеки dir /usr/local/lib/python2.7/lib-dynload существует

если нет, создайте символическую ссылку на существующий путь lib64:

linux-t69c:/nkadic # ln -s /usr/local/lib64/python2.7/lib-dynload/  
/usr/local/lib/python2.7/lib-dynload
linux-t69c:/nkadic # ls -ltr /usr/local/lib/python2.7/lib-dynload
lrwxrwxrwx 1 root root 39 Aug 12 21:06 /usr/local/lib/python2.7/lib-dynload -> 
/usr/local/lib64/python2.7/lib-dynload/

После этого обходного пути работает "virtualenv -p python venv2"

linux-t69c:/nkadic # virtualenv -p python venv2
Already using interpreter /usr/local/bin/python
PYTHONHOME is set.  You *must* activate the virtualenv before using it
New python executable in /nkadic/venv2/bin/python
Installing setuptools, pip, wheel...done.
linux-t69c:/nkadic # 
0
nkadic

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

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

или же 

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