如何在 Python 3 虚拟环境中为 iPython Notebook 安装 pyzmq?

如何在 Python 3 虚拟环境中为 iPython Notebook 安装 pyzmq?

我想在 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但仍然不起作用。pipeasy_installcython3尽管已安装,但仍发送了此消息:

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

此后,安装两者pyzmqipython[notebook]在我的虚拟环境中完美运行:

pip3.4 install pyzmq
pip install ipython[notebook]

我无意中使用了pipfor但它仍然有效pip3.4ipython[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 虚拟环境中进行安装。

相关内容