python 2.7 => ImportError:没有名为 _io 的模块

python 2.7 => ImportError:没有名为 _io 的模块

我决定从 Windows 切换到 Linux,所以我安装了 Ubuntu Raring 最终测试版。

不幸的是我遇到了一个 Python 问题。

我尝试使用我创建的虚拟环境,从如下文件pip安装软件包:requirements.txtpip 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-devdeb 包:

sudo apt-get install python-dev

由于我安装了这个包,所以当我尝试运行 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

有人有想法吗?我在 Google 上找不到任何东西,我真的需要解决这个问题才能使用 Ubuntu 进行工作...

感谢您的帮助。

编辑:

看来我的虚拟环境由于某种原因损坏了。我卸载了它。

我重新创建了一个,并再次执行“pip install -r requirements.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

编辑2:

通过安装该包gcc可以修复上述错误。build-essential

答案1

除了标准库和第三方模块之外,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.7env/bin/python,然后将所有标准库模块符号链接到来工作env/lib/python2.7/*.py

当您升级系统 Python 时,您会在所有虚拟环境中自动获得更新的标准库(因为符号链接!),但您仍在使用 Python 可执行文件的旧副本。这意味着您还在使用内置模块的旧版本。

一些标准库模块依赖于内置模块。有时 Python 2.7.(x+1) 标准库也依赖于 Python 2.7.(x+1) 中引入的内置模块。通过使用旧的虚拟环境,您实际上是在尝试将 Python 2.7.x 与 Python 2.7.(x+1) 的标准库一起使用,但有时会出现问题。

重新创建虚拟环境是正确的解决方案。

(假设更新的系统 Python 中没有出现新的 stdlib 文件,那么替换虚拟环境内的bin/python和可执行文件可能就足够了。)bin/python2.7

答案2

您必须替换损坏的虚拟环境中的 python 版本。

做这个:

  1. 创建新的Virtualenv

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

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

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

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

答案3

请注意,我添加此答案是为了将问题从未回答的队列中移除。

正如你在第二次编辑中所建议的那样,

上面的 gcc 错误可以通过安装 build-essential debian 包来修复。

答案4

您不需要删除虚拟环境。

只需按照以下步骤操作即可。假设您的虚拟环境名称是“mydev”

1)虚拟环境 mydev

上述命令只是升级,不会丢失任何包。

2)在虚拟环境之外,如果你的 pip 不起作用,那么只需“easy_install pip”即可解决问题

相关内容