我决定从 Windows 切换到 Linux,所以我安装了 Ubuntu Raring 最终测试版。
不幸的是我遇到了一个 Python 问题。
我尝试使用我创建的虚拟环境,从如下文件pip
安装软件包: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
由于我安装了这个包,所以当我尝试运行 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.7
到env/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 版本。
做这个:
创建新的Virtualenv
mkvirtualenv MyNewTestEnv
找到“python”(在我的例子中,virtualenvs 位于主目录中)
cd ~/.virtualenvs/MyNewTestEnv/bin
将“python”从新的虚拟环境复制到损坏的虚拟环境中
cp ~/.virtualenvs/MyNewTestEnv/bin/python ~/.virtualenvs/<yourCorruptedEnv>/bin
就是这样。现在你的 CorruptedEnv 应该已经修复了。
答案3
请注意,我添加此答案是为了将问题从未回答的队列中移除。
正如你在第二次编辑中所建议的那样,
上面的 gcc 错误可以通过安装 build-essential debian 包来修复。
答案4
您不需要删除虚拟环境。
只需按照以下步骤操作即可。假设您的虚拟环境名称是“mydev”
1)虚拟环境 mydev
上述命令只是升级,不会丢失任何包。
2)在虚拟环境之外,如果你的 pip 不起作用,那么只需“easy_install pip”即可解决问题