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

Art*_*hur 3 python python3 virtualenv ipython

我想在 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
Run Code Online (Sandbox Code Playgroud)

但是当我在我的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.
Run Code Online (Sandbox Code Playgroud)

我在 Synaptic Package Manager 中确认libzmq3Ubuntu的包只有 4.0.4 版。作为替代方案,我尝试了此修复程序,并pyzmq构建了自己的libzmq依赖项:

 pip install pyzmq --install-option="--zmq=bundled"
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为它找不到某个头文件:

    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
Run Code Online (Sandbox Code Playgroud)

接下来,我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
Run Code Online (Sandbox Code Playgroud)

没有遇到任何问题。在此之后,我尝试pyzmq在我的虚拟环境中安装:

easy_install pyzmq
Run Code Online (Sandbox Code Playgroud)

我也尝试pyzmq从源代码构建。在这两种情况下,我都可以从输出中看到检测到正确的 ZMQ 版本(4.0.5),但安装失败,因为我没有安装 Cython(pyzmq在我看来,这是一个没有很好记录的构建依赖项) .

为 Python 3 安装 Cython 后...

sudo apt-get install cython3
Run Code Online (Sandbox Code Playgroud)

我尝试安装pyzmq与再度pipeasy_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.
Run Code Online (Sandbox Code Playgroud)

而这个文件结构:

$ 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 
Run Code Online (Sandbox Code Playgroud)

小智 5

“Python.h”错误消息表明您缺少python3-dev构建任何 Python 扩展(用 C 编写的 Python 模块)所需的包,您可以通过以下方式获得:

apt-get install python3-dev
Run Code Online (Sandbox Code Playgroud)

要从头开始运行:

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
Run Code Online (Sandbox Code Playgroud)

安装的软件包:

  • build-essential:用于在 Ubuntu 上构建东西的编译器和头文件。
  • python3-dev:编译任何 Python 扩展所需的头文件 (Python.h)。
  • libzmq3-dev:libzmq 库及其头文件。这是可选的,但推荐使用。如果可以,PyZMQ 将链接到系统上找到的 libzmq,否则它将构建 libzmq 本身作为 Python 扩展。
  • PIP,的virtualenv:不应该是必要的,但使用要解决Ubuntu的错误,打破python3 -m venv

我在基本ubuntu:14.04docker 容器中运行了上述命令,以验证它们是否足以在 virtualenv 中成功构建 pyzmq。