Como instalar o pyzmq para o iPython Notebook em um ambiente virtual do Python 3?

3

Eu queria usar o iPython Notebook no Python 3 no Ubuntu 14.04. Como tenho o Python 2.7 e o Python 3.4 instalados no meu sistema - e por outros motivos específicos da implementação -, decidi usar um ambiente virtual do Python (com virtualenv ). Muito pouco foi escrito sobre este assunto até agora ...

Esses relatórios não tratam especificamente do Python 3 e dos ambientes virtuais. Além disso, o oficial e vários guias não-oficiais para instalar o iPython Notebook também não lidam com este caso de uso.

O principal problema que encontrei é com a biblioteca do ZMQ. Para instalar a biblioteca e as ligações do Python em todo o sistema, usei apt-get :

sudo apt-get install libzmq3 libzmq3-dev python3-zmq

Mas quando tentei o pip install ipython[notebook] , dentro ou fora do meu virtualenv , a instalação falharia com o status de saída 1 e os avisos:

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.

Confirmei no Gerenciador de Pacotes Synaptic que o pacote libzmq3 para o Ubuntu é apenas a versão 4.0.4. Como alternativa, Eu tentei esta correção , tendo pyzmq construindo sua própria libzmq dependency:

 pip install pyzmq --install-option="--zmq=bundled"

Mas isso falhou porque não foi possível encontrar um determinado arquivo de cabeçalho:

    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

Em seguida, criei libzmq versão 4.0.5 a partir do código-fonte.

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

Nenhum problema encontrado. Depois disso, tentei instalar o pyzmq no meu ambiente virtual com:

easy_install pyzmq

Eu também tentei criar pyzmq da fonte. Em ambos os casos, pude ver na saída que a versão adequada do ZMQ (4.0.5) foi detectada, mas a instalação falhou porque eu não tinha o Cython instalado (uma dependência não bem documentada para construir pyzmq , em minha opinião).

Depois de instalar o Cython for Python 3 ...

sudo apt-get install cython3

Eu tentei instalar pyzmq novamente com pip e com easy_install dentro e fora do ambiente virtual; ainda não funcionou. Esta mensagem foi entregue apesar de o cython3 estar instalado:

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.

E essa estrutura de arquivos:

$ 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 
    
por Arthur 15.01.2015 / 18:12

2 respostas

0

Por fim, considerei instalar o iPython Notebook em todo o sistema (fora de um ambiente virtual). Eu já havia tentado instalar o pyzmq em todo o sistema, mas isso não foi suficiente.

Quando considerei instalar o iPython Notebook fora do ambiente virtual, percebi: "Como obtenho o pip para discriminar entre o Python 2.7 e o Python 3.4?" Eu fui pesquisar e encontrei esta excelente resposta . De fato, meu problema central estava relacionado a pip . Eu instalei o pip correspondente à minha versão do Python 3:

sudo apt-get install python3-setuptools
sudo easy_install3 pip

Depois disso, a instalação de pyzmq e ipython[notebook] funcionou perfeitamente no meu ambiente virtual:

pip3.4 install pyzmq
pip install ipython[notebook]

Eu usei acidentalmente pip em vez de pip3.4 para ipython[notebook] , mas funciona assim mesmo:

(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

No entanto, foi necessário usar pip3.4 para obter pyzmq instalado em um ambiente virtual do Python 3.

    
por Arthur 15.01.2015 / 18:12
5

A mensagem de erro "Python.h" indica que você está perdendo o pacote python3-dev , que você precisa para construir qualquer extensão do Python (módulos do Python escritos em C), com a qual você pode obter:

apt-get install python3-dev

Para começar a funcionar do zero:

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

Os pacotes instalados:

  • build-essential: compiladores e cabeçalhos para construir coisas no Ubuntu.
  • python3-dev: cabeçalhos (Python.h) necessários para compilar quaisquer extensões do Python.
  • libzmq3-dev: a biblioteca libzmq e seus cabeçalhos. Isso é opcional, mas recomendado. O PyZMQ irá se ligar ao libzmq encontrado no sistema, se puder, caso contrário, ele construirá a própria libzmq como uma extensão do Python.
  • pip, virtualenv: Não deve ser necessário, mas usado para solucionar erro do Ubuntu que quebra python3 -m venv .

Eu executei os comandos acima em um contêiner base do docker ubuntu:14.04 para verificar se eles são suficientes para construir com êxito o pyzmq em um virtualenv.

    
por minrk 21.05.2015 / 01:05