3 votes

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

Je voulais utiliser iPython Notebook dans Python 3 sur Ubuntu 14.04. Parce que j'ai à la fois Python 2.7 et Python 3.4 installés sur mon système - et pour d'autres raisons spécifiques à 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 traitent pas spécifiquement de Python 3 et des environnements virtuels. De plus, le officiel et divers guides non officiels à l'installation d'iPython Notebook ne traitent pas non plus de ce cas d'utilisation.

Le principal problème que j'ai rencontré concerne la bibliothèque ZMQ. Pour installer la bibliothèque et les liens Python dans tout le système, j'ai utilisé apt-get :

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

Mais quand j'ai essayé pip install ipython[notebook] soit à l'intérieur ou à l'extérieur de mon virtualenv l'installation échoue avec le statut 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 seulement la version 4.0.4. Comme alternative, J'ai essayé cette solution ayant pyzmq construire sa propre libzmq dépendance :

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

Mais cela a échoué parce qu'il ne pouvait pas trouver un certain fichier d'en-tête :

    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 de la source.

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 de la source. Dans les deux cas, j'ai pu voir à partir de la sortie que la bonne version de ZMQ (4.0.5) a été détectée, mais l'installation a échoué parce que Cython n'était pas installé (une dépendance pas bien documentée pour la construction de pyzmq à mon avis).

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

sudo apt-get install cython3

J'ai essayé d'installer pyzmq à nouveau avec pip et avec easy_install à la fois à l'intérieur et à l'extérieur de l'environnement virtuel ; ça ne fonctionnait toujours pas. Ce message a été délivré malgré cython3 en cours d'installation :

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

6voto

minrk Points 196

Le message d'erreur "Python.h" indique qu'il vous manque le fichier python3-dev dont vous avez besoin pour construire toutes les extensions Python (modules Python écrits en C), que vous pouvez obtenir avec :

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 paquets installés :

  • build-essential : compilateurs et 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. Ceci est facultatif, mais recommandé. PyZMQ fera le lien avec la bibliothèque libzmq trouvée sur le système s'il le peut, sinon il construira libzmq lui-même comme une extension Python.
  • pip, virtualenv : Ne devrait pas être nécessaire, mais utilisé pour contourner le problème. Le bug d'Ubuntu qui casse python3 -m venv .

J'ai exécuté les commandes ci-dessus dans une base ubuntu:14.04 pour vérifier qu'ils sont suffisants pour réussir à construire pyzmq dans un virtualenv.

0voto

Arthur Points 420

Enfin, j'ai envisagé d'installer iPython Notebook sur l'ensemble du système (en dehors d'un environnement virtuel). J'avais auparavant essayé d'installer simplement pyzmq à l'échelle du système, mais ce n'était pas suffisant.

Lorsque j'ai envisagé d'installer iPython Notebook en dehors de l'environnement virtuel, je me suis demandé "comment faire pour obtenir pip pour faire la différence entre Python 2.7 et Python 3.4 ?" J'ai fait des recherches et J'ai trouvé cette excellente réponse . En fait, il s'avère que mon problème central était lié à pip . J'ai installé le pip correspondant à ma version de Python 3 :

sudo apt-get install python3-setuptools
sudo easy_install3 pip

Et après cela, l'installation des deux pyzmq y ipython[notebook] a fonctionné parfaitement dans mon environnement virtuel :

pip3.4 install pyzmq
pip install ipython[notebook]

J'ai accidentellement utilisé pip au lieu de pip3.4 para ipython[notebook] mais ça marche 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 obtenir pyzmq installé dans un environnement virtuel Python 3.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X