【问题标题】:ImportError: No module named _io in ubuntu 14.04ImportError:ubuntu 14.04 中没有名为 _io 的模块
【发布时间】:2014-06-04 07:06:03
【问题描述】:

我刚刚安装了 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-pipsudo apt-get install python-pip

【问题讨论】:

标签: python linux ubuntu pip


【解决方案1】:

我遇到了同样的问题。这发生在 Ubuntu - 14.04 和虚拟环境的 Python 版本 - 2.7.3

在调试了一天后,在这里发布我的答案,希望对以后的访问者有所帮助。

我发现io.py 正在调用_io 模块。我认为_io 模块是解释器内部的,因此,只需将环境中的python 二进制文件替换为较新的版本即可解决。

(在我的例子中,Cloudera Manager 5.x Agent 在 ubuntu 14.04 上的 virtualenv 使用的是 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 二进制文件。因此,这解释了线程中接受的答案。

【讨论】:

  • 我认为 virtualenv 的全部意义在于将 python 和库与操作系统隔离开来。为什么系统python更改会影响任何东西?
  • 在尝试这个之后我得到“ImportError: No module named _sysconfigdata_nd”,由于bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1115466
  • 这是一个很好的问题。尽管 virtualenv 与 python 隔离,_io 问题在于解释器本身的本机库,这些库似乎不是孤立的,与系统共享。我认为,在 ubuntu 14.04 中,一些系统库被重组,所以旧的 python(2.7.3 - 与 ubuntu12.04 一起)不起作用。当我检查 ubuntu14.04 附带的较新的 python 时(只需进入控制台并执行import io),它就起作用了。
  • 我必须在复制之前删除myenv/bin/pythonrm myenv/bin/python;cp `which python` myenv/bin/python。谢谢!
  • 这是这个页面上唯一对我有用的答案(都试过了)。这将虚拟环境中的 python 解释器从 python 2.7.3 升级到了 2.7.6。顺便说一句,我没有使用 Cloudera 管理器,只是一个香草 Ubuntu 14.04,其中虚拟环境起源于 12.04(和 git 在 14.04 上克隆)。谢谢!
【解决方案2】:

由于 Python 系统库中的差异,您的 virtualenv 已损坏。

最好的选择是重新安装你的 virtualenv:

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

【讨论】:

  • 为什么我有这些差异?因为升级?
  • @psychok7 是的,系统升级可能替换了一些库。
  • 它告诉我rmvirtualenv: command not found。我需要在特定目录中吗?另外,requirements.txt 是什么/在哪里?
  • 当然,但这是一个大锤子,只要将新的 2.7 二进制文件复制到现有环境就足够了(请参阅stackoverflow.com/a/24191303/143804)。
  • 这取决于重新创建 virtualenv 的成本。在我的具体情况下,安装只是通过 requirements.txt 半自动化。有一个手动许可步骤和一个手动配置步骤。此外,我依赖 scipy 等等。从头开始构建 scipy 需要很长时间。
【解决方案3】:

您不需要删除虚拟环境。

只需按照以下步骤操作即可。

  1. 假设您的虚拟环境名称是“mydev”并且您使用的是virtualenvwrapper,请执行

    cd $WORKON_HOME
    virtualenv mydev
    

    上面的命令只是升级到 python 可执行文件的链接而不会丢失任何包。如果没有virtualenvwrapper$WORKON_HOME 可能不会被定义;那么你需要切换到virtualenv的父目录。

  2. 在 virtualenv 之外,如果你的 pip 不工作,那么就

    easy_install pip
    

    将解决问题。

【讨论】:

【解决方案4】:

我的ubuntu服务器升级到14.04后,我在执行pip的时候也出现了这种问题

ImportError: No module named _io

然后我发现只需重新安装virtualenv就可以解决这个问题!

sudo pip install virtualenv --upgrade

【讨论】:

    【解决方案5】:

    造成这种情况的一个原因是“点子”不好。看: 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 .
    

    【讨论】:

      【解决方案6】:

      您必须替换损坏的 virtualenv 中的 python 版本。

      这样做:

      1. 创建一个新的 Virtualenv

        mkvirtualenv MyNewTestEnv
        
      2. 找到“python”(在我的例子中,virtualenvs 位于主目录中)

        cd ~/.virtualenvs/MyNewTestEnv/bin
        
      3. 将“python”从新的 virtualenv 复制到损坏的 virtualenv 中

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

      就是这样。现在你的 CorruptedEnv 应该已经修复了。

      【讨论】:

      • 什么是mkvirtualenv ?我在 ubuntu 上找不到那个包
      • 签出 Virtualenvwrapper!
      【解决方案7】:

      如果您安装了不同的 python 版本。你必须引用你的python

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

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

      【讨论】:

        【解决方案8】:

        此解决方法适用于 SuSE 12.2 下载 python 并使用 ./configure 安装它并 make install 到 defult /usr/local 文件夹

        安装 pip 和 virtualenv

        尝试创建 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)

        检查是否有libs 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 # 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-30
          • 2017-08-09
          • 2017-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-16
          • 1970-01-01
          相关资源
          最近更新 更多