Je pense que cela ne fait aucune différence ici, mais j'utilise Python 2.7.
La partie générale de ma question est donc la suivante: j'utilise un virtualenv
distinct pour chacun de mes projets. Je n'ai pas d'accès administrateur et je ne veux pas jouer avec les packages installés par le système de toute façon. Naturellement, je veux utiliser des roues pour accélérer les mises à niveau et les installations de packages à travers les virtualenv
s. Comment puis-je construire une roue dont les dépendances ne sont satisfaites que dans un virtualenv
spécifique?
Plus précisément, l'émission
pip wheel -w $WHEELHOUSE scipy
échoue avec
Building wheels for collected packages: scipy
Running setup.py bdist_wheel for scipy
Destination directory: /home/moritz/.pip/wheelhouse
Complete output from command /home/moritz/.virtualenvs/base/bin/python -c "import setuptools;__file__='/home/moritz/.virtualenvs/base/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /home/moritz/.pip/wheelhouse:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 237, in <module>
setup_package()
File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 225, in setup_package
from numpy.distutils.core import setup
ImportError: No module named numpy.distutils.core
----------------------------------------
Failed building wheel for scipy
Failed to build scipy
Cleaning up...
parce que numpy
n'est pas globalement présent et pendant que la construction de la roue fonctionne quand un virtualenv
avec numpy
installé est actif, il semble être une très mauvaise idée de faire dépendre la roue d'un virtualenv
version de numpy
.
pandas
qui dépend également de numpy
semble installer ses propres composants de numpy
mais je ne suis pas sûr que ce soit la meilleure solution.
Je pourrais installer numpy
avec --user
et l'utiliser pour construire la roue scipy
. Y a-t-il de meilleures options?
scipy
), qui dépend d'autres packages (comme numpy
) mais setup.py
Ne déclare pas cette exigence /dépendance.Remarque: La solution idéale consiste à corriger le setup.py
Cassé en y ajoutant la déclaration de package requise. Mais ce n'est généralement pas possible et nous devons faire un autre chemin.
La procédure (pour installer scipy
qui nécessite numpy
) comporte deux étapes
Cela ne doit être fait qu'une seule fois et peut être réutilisé plusieurs fois.
avoir une configuration de pip correctement configurée pour que l'installation à partir des roues soit autorisée, le répertoire de la timonerie est configuré et chevauche avec download-cache
et find-links
comme dans l'exemple suivant de pip.conf
:
[global]
download-cache = /home/javl/.pip/cache
find-links = /home/javl/.pip/packages
[install]
use-wheel = yes
[wheel]
wheel-dir = /home/javl/.pip/packages
installer toutes les bibliothèques système requises pour tous les packages, qui doivent être compilés
construire une roue pour le package requis (numpy
)
$ pip wheel numpy
configurez virtualenv (nécessaire une seule fois), activez-le et installez-le numpy
:
$ pip install numpy
Lorsqu'une roue est prête, elle doit être rapide.
construire une roue pour scipy
(toujours dans le virtualenv)
$ pip wheel scipy
À présent, votre timonerie sera remplie des roues dont vous avez besoin.
Vous pouvez supprimer le virtualenv temporaire, il n'est plus nécessaire.
Je suppose que vous avez créé un nouveau virtualenv, que vous l'avez activé et que vous souhaitez y installer scipy
.
L'installation de scipy
à partir de la nouvelle roue scipy
directement échouerait toujours si numpy
manquait. Nous avons surmonté ce problème en installant numpy
en premier.
$ pip install numpy
Et puis finir avec scipy
$ pip install scipy
Je suppose que cela pourrait être fait en un seul appel (mais je ne l'ai pas testé)
$ pip install numpy scipy
scipy
d'une version éprouvéeIl est probable qu'à un moment donné, une nouvelle version de scipy
ou numpy
sera publiée et pip tentera d'installer la dernière version pour laquelle il n'y a pas de roue dans votre timonerie.
Si vous pouvez vivre avec les versions que vous avez utilisées jusqu'à présent, vous devez créer requirements.txt
En indiquant les versions de numpy
et scipy
que vous aimez et installez à partir de celui-ci.
Cela garantira la présence du paquet nécessaire avant qu'il ne soit réellement utilisé.