web-dev-qa-db-fra.com

Comment installer pyzmq for iPython Notebook dans un environnement virtuel Python 3?

Je voulais utiliser iPython Notebook dans Python 3 sur Ubuntu 14.04. Étant donné que Python2.7 et Python 3.4 sont installés sur mon système (et pour d'autres raisons liées à l'implémentation), j'ai décidé d'utiliser un environnement virtuel Python. (avec virtualenv). Très peu de choses ont été écrites sur ce sujet jusqu'à présent ...

Ces rapports ne gèrent pas spécifiquement Python 3 et les environnements virtuels. En outre, le officiel et divers guides non officiels pour installer iPython Notebook ne traitent pas non plus de ce cas d'utilisation.

Le problème principal que j'ai rencontré est celui de la bibliothèque ZMQ. Pour installer la bibliothèque et les liaisons Python à l'échelle du système, j'ai utilisé apt-get:

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

Mais lorsque j'ai essayé pip install ipython[notebook], à l'intérieur ou à l'extérieur de mon virtualenv, l'installation échouait avec l'état de sortie 1 et les avertissements:

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.

J'ai confirmé dans le gestionnaire de paquets Synaptic que le paquet libzmq3 pour Ubuntu est uniquement la version 4.0.4. Comme alternative, I essayé ce correctif , ayant pyzmq construire sa propre dépendance libzmq:

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

Mais cela a échoué car il n'a pas pu trouver un fichier d'en-tête particulier:

    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

Ensuite, j'ai construit libzmq version 4.0.5 à partir des sources.

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

Aucun problème rencontré. Après cela, j'ai essayé d'installer pyzmq dans mon environnement virtuel avec:

easy_install pyzmq

J'ai aussi essayé de construire pyzmq à partir de la source. Dans les deux cas, j'ai pu voir dans la sortie que la version correcte de ZMQ (4.0.5) avait été détectée, mais l'installation a échoué car Cython ne m'avait pas installé (dépendance non documentée pour la construction pyzmq , À mon avis).

Après avoir installé Cython pour Python 3 ...

Sudo apt-get install cython3

J'ai essayé d'installer à nouveau pyzmq avec pip et avec easy_install à la fois à l'intérieur et à l'extérieur de l'environnement virtuel; cela n'a toujours pas fonctionné. Ce message a été remis malgré le fait que cython3 soit installé:

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.

Et cette structure de fichier:

$ 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 
3
Arthur

Enfin, j'ai envisagé d'installer iPython Notebook à l'échelle du système (en dehors d'un environnement virtuel). J'avais déjà essayé d'installer pyzmq à l'échelle du système, mais cela ne suffisait pas.

Lorsque j'ai envisagé d'installer iPython Notebook en dehors de l'environnement virtuel, j'ai compris: "Comment obtenir pip une discrimination entre Python 2.7 et Python 3.4? " Je suis allé chercher et j'ai trouvé cette excellente réponse . En fait, il se trouve que mon problème central était lié à pip. J'ai installé la pip correspondant à ma version Python 3:

Sudo apt-get install python3-setuptools
Sudo easy_install3 pip

Et après cela, installer à la fois pyzmq et ipython[notebook] fonctionnait parfaitement dans mon environnement virtuel:

pip3.4 install pyzmq
pip install ipython[notebook]

J'ai utilisé accidentellement pip au lieu de pip3.4 pour ipython[notebook] mais cela fonctionne quand même:

(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

Cependant, l'utilisation de pip3.4 était nécessaire pour que pyzmq soit installé dans un environnement virtuel Python 3. .

0
Arthur

Le message d'erreur "Python.h" indique que le paquetage python3-dev, dont vous avez besoin pour créer des extensions Python (modules Python écrits en C), est manquant:

apt-get install python3-dev

Pour être opérationnel à partir de zéro:

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

Les packages installés:

  • build-essential: des compilateurs et des en-têtes pour construire des choses sur Ubuntu.
  • python3-dev: en-têtes (Python.h) nécessaires à la compilation de toute extension Python.
  • libzmq3-dev: la bibliothèque libzmq et ses en-têtes. C'est facultatif, mais recommandé. Si cela est possible, PyZMQ établira un lien avec libzmq qui se trouve sur le système, sinon il construira lui-même libzmq en tant qu'extension Python.
  • pip, virtualenv: ne devrait pas être nécessaire, mais utilisé pour contourner le problème bug d’Ubunt qui casse python3 -m venv.

J'ai exécuté les commandes ci-dessus dans un conteneur docker de base ubuntu:14.04 pour vérifier qu'elles suffisent pour créer avec succès pyzmq dans un fichier virtualenv.

5
minrk