我想在 Ubuntu 14.04 上的 Python 3 中使用 iPython Notebook。由于我的系统上同时安装了 Python 2.7 和 Python 3.4(以及出于其他特定于实现的原因),我决定使用 Python 虚拟环境(带有virtualenv
)。到目前为止,关于这个主题的文章很少...
这些报告并不专门处理 Python 3 和虚拟环境。此外,官方的和各种非官方指南安装 iPython Notebook 也不处理这种用例。
我遇到的主要问题是 ZMQ 库。要在整个系统内安装库和 Python 绑定,我使用了apt-get
:
sudo apt-get install libzmq3 libzmq3-dev python3-zmq
但是当我尝试时pip install ipython[notebook]
,无论是在我的内部还是外部virtualenv
,安装都会失败,退出状态为 1,并出现警告:
Warning: Detected ZMQ version: 4.0.4, but pyzmq targets ZMQ 4.0.5.
Warning: libzmq features and fixes introduced after 4.0.4 will be unavailable.
我在 Synaptic 软件包管理器中确认libzmq3
适用于 Ubuntu 的软件包只有 4.0.4 版本。作为备选,我试过这个修复,已经pyzmq
建立了自己的libzmq
依赖关系:
pip install pyzmq --install-option="--zmq=bundled"
但由于找不到某个头文件,因此失败了:
buildutils/initlibsodium.c:10:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
接下来,我libzmq
从源代码构建了 4.0.5 版本。
wget http://download.zeromq.org/zeromq-4.0.5.tar.gz
tar -xzvf zeromq-4.0.5.tar.gz && rm zeromq-4.0.5.tar.gz
cd /usr/local/zmq/zeromq-4.0.5
./configure
make -j 6
sudo make install
没有遇到任何问题。此后,我尝试pyzmq
在虚拟环境中安装:
easy_install pyzmq
我也尝试pyzmq
从源代码构建。在这两种情况下,我都可以从输出中看到检测到了正确的 ZMQ 版本 (4.0.5),但是安装失败,因为我没有安装 Cython (在pyzmq
我看来,这是一个没有很好记录的构建依赖项)。
安装 Python 3 的 Cython 后...
sudo apt-get install cython3
我尝试在虚拟环境内外再次进行安装;pyzmq
但仍然不起作用。pip
easy_install
cython3
尽管已安装,但仍发送了此消息:
Fatal: Cython-generated file 'zmq/backend/cython/_device.c' not found.
Cython >= 0.16 is required to compile pyzmq from a development branch.
Please install Cython or download a release package of pyzmq.
这个文件结构:
$ ls -l zmq/backend/cython/
checkrc.pxd context.pxd __init__.py _poll.pyx utils.pxd
constant_enums.pxi context.pyx libzmq.pxd rebuffer.pyx utils.pyx
constants.pxi _device.pyx message.pxd socket.pxd _version.pyx
constants.pyx error.pyx message.pyx socket.pyx
答案1
“Python.h”错误消息表明您缺少python3-dev
构建任何 Python 扩展(用 C 编写的 Python 模块)所需的包,您可以通过以下方式获取:
apt-get install python3-dev
从头开始启动并运行:
apt-get update && apt-get install python3-dev python3-pip build-essential libzmq3-dev
pip3 install virtualenv
virtualenv -p $(which python3) myenv
source myenv/bin/activate
pip install pyzmq
python -c 'import zmq; print(zmq.zmq_version())'
# 4.0.4
已安装的软件包:
- build-essential:用于在 Ubuntu 上构建事物的编译器和头文件。
- python3-dev:编译任何 Python 扩展所需的标头(Python.h)。
- libzmq3-dev:libzmq 库及其标头。这是可选的,但建议使用。如果可以,PyZMQ 将链接到系统上找到的 libzmq,否则它将构建 libzmq 本身作为 Python 扩展。
- pip,virtualenv:不需要,但可以用来解决问题Ubuntu 的漏洞打破了
python3 -m venv
。
我在基础 docker 容器中运行了上述命令ubuntu:14.04
,以验证它们是否足以在虚拟环境中成功构建 pyzmq。
答案2
最后,我考虑在系统范围内(虚拟环境之外)安装 iPython Notebook。我之前曾尝试过在pyzmq
系统范围内安装,但这还不够。
当我考虑在虚拟环境之外安装 iPython Notebook 时,我意识到“我如何pip
区分 Python 2.7 和 Python 3.4?”我去搜索了一下找到了这个很好的答案。事实上,事实证明我的核心问题与有关pip
。我安装了pip
与我的 Python 3 版本相对应的:
sudo apt-get install python3-setuptools
sudo easy_install3 pip
此后,安装两者pyzmq
并ipython[notebook]
在我的虚拟环境中完美运行:
pip3.4 install pyzmq
pip install ipython[notebook]
我无意中使用了pip
for但它仍然有效pip3.4
:ipython[notebook]
(my-virtual-env)me@computer:~$ pip freeze
Jinja2==2.7.3
MarkupSafe==0.23
certifi==14.05.14
ipython==2.3.1
pyzmq==14.4.1
tornado==4.0.2
但是,pip3.4
需要使用才能pyzmq
在 Python 3 虚拟环境中进行安装。