2011-02-12 5 views
13

Donc pip et virtualenv son merveilleux par rapport à setuptools. Pouvoir désinstaller serait génial. Mais mon projet utilise déjà setuptools, alors comment migrer? Les sites Web que j'ai pu trouver jusqu'à présent sont très vagues et généraux. Alors, voici une anthologie de questions après avoir lu les principaux sites web et d'essayer des choses sur:Migration vers pip + virtualenv à partir de setuptools

  • Tout d'abord, sont virtualenv et pip censé être dans un état utilisable maintenant? Si non, s'il vous plaît ne tenez pas compte du reste comme les délires d'un fou. Comment fonctionne le virtualenv? Je ne suis pas tout à fait prêt à croire que c'est aussi compliqué que explained elsewhere.
  • Existe-t-il un ensemble d'instructions testées pour installer matplotlib dans un environnement virtuel? Pour une raison quelconque, il veut toujours le compiler ici au lieu de simplement installer un paquet, et il finit toujours par un échec (même après build-dep qui a pris 250 Mo d'espace disque). Après tout un tas d'avertissements, il imprime src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope.
  • Comment l'un ou l'autre outil interagit avec setup.py? pip est supposé remplacer easy_install, mais il n'est pas clair s'il s'agit d'une relation directe ou plus compliquée.
  • Est-ce que virtualenv est seulement pour le mode développement, ou est-ce que les utilisateurs devraient également l'installer?
  • Le package résultant sera-t-il installé avec les exigences minimales (comme l'oeuf actuel) ou sera-t-il installé avec les sources & binaires pour toutes les dépendances plus tous les outils de construction, créant un monstre gigaoctet dans l'environnement virtuel?
  • Les utilisateurs devront-ils modifier leur $PATH et $PYTHONPATH pour exécuter le package résultant s'il est installé dans un environnement virtuel? J'ai besoin de créer un script from a text string pour virtualenv comme dans le mauvais vieux temps? Qu'est-ce que la syntaxe #egg=Package URL? Cela ne fait pas partie de l'URL standard, alors pourquoi n'est-ce pas un paramètre séparé?
  • Où est inclus @rev dans l'URL? A la fin je suppose, mais la documentation n'est pas claire à ce sujet ("Vous pouvez aussi inclure @rev dans l'URL"). Qu'est-ce qui est censé être compris en utilisant un fichier des exigences existant comme "as a sort of template for the new file"? Cela pourrait signifier n'importe quel nombre de choses.
+4

AFAIK, pip et virtualenv ne remplacent pas setuptools. distribuer est le remplacement suggéré pour setuptools, pip remplace easy_install, et virtualenv est sa propre chose spéciale. Les deux premiers permettent au responsable du paquet de savoir comment installer le paquet, les deux suivants aident l'installateur à garder une trace de ce qu'il a installé (et à installer des dépendances) et le dernier permet à l'utilisateur de basculer facilement entre plusieurs collections de paquets installés. du même paquet). – AFoglia

Répondre

21

Wow, c'est une série de questions. Beaucoup d'entre eux mériteraient vraiment leur propre question SO avec plus de détails. Je ferai de mon mieux:

First of all, are virtualenv and pip supposed to be in a usable state by now?

Oui, bien qu'ils ne répondent pas aux besoins de tous. Pip et virtualenv (avec tout le reste dans la gestion des paquets Python) sont loin d'être parfaits, mais ils sont largement utilisés et dépendent néanmoins.

How should virtualenv be installed? I'm not quite ready to believe it's as convoluted as explained elsewhere.

La réponse que vous lien est complexe, car il tente d'éviter de faire des changements tout à votre installation globale Python et installer tout ~/.local à la place. Cela a quelques avantages, mais est plus complexe à installer. Il installe également virtualenvwrapper, qui est un ensemble de scripts bash pour travailler avec virtualenv, mais n'est pas nécessaire pour utiliser virtualenv.

Si vous êtes sur Ubuntu, aptitude install python-setuptools suivi par easy_install virtualenv devrait vous obtenir une installation virtualenv travailler sans faire de dégâts à votre environnement mondial python (à moins que vous aviez aussi le paquet virtualenv Ubuntu installé, que je ne recommande pas car il sera probablement être une ancienne version).

Is there a set of tested instructions for how to install matplotlib in a virtual environment? For some reason it always wants to compile it here instead of just installing a package, and it always ends in failure (even after build-dep which took up 250 MB of disk space). After a whole bunch of warnings it prints src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope.

Il « veut toujours compiler » parce pip, par la conception, installe uniquement de la source, il n'installe pas les binaires pré-compilés. C'est un choix controversé, et c'est probablement la principale raison pour laquelle pip a été largement adopté par les développeurs web Python, qui utilisent des paquets Python plus purs et qui se développent et se déploient couramment dans les environnements POSIX où une chaîne de compilation est standard. La raison du choix de conception est que fournir des binaires précompilés a un problème d'explosion combinatoire avec différentes plates-formes et architectures de construction (y compris la version python, les compilations python UCS-2 et UCS-4, 32 vs 64 bits ...) . La façon dont easy_install trouve le bon paquet binaire sur le genre de travail PyPI, la plupart du temps, mais ne tient pas compte de tous ces facteurs et peut casser. Donc, pip évite tout simplement ce problème (en le remplaçant par l'exigence que vous ayez un environnement de compilation fonctionnel).

Dans de nombreux cas, les packages qui nécessitent une compilation C ont également une planification de publication plus lente et il est acceptable d'installer simplement des packages de système d'exploitation à leur place. Cependant, cela ne permet pas de travailler avec différentes versions dans différents virtualenvs.

Je ne sais pas ce qui cause votre erreur de compilation, il fonctionne pour moi (sur Ubuntu 10.10) avec cette série de commandes:

virtualenv --no-site-packages tmp 
. tmp/bin/activate 
pip install numpy 
pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib 

Le lien « -f » est nécessaire pour obtenir le plus récent version, en raison de unusual download URLs on PyPI de matplotlib.

How does either tool interact with setup.py? pip is supposed to replace easy_install, but it's not clear whether it's a drop-in or more complicated relationship.

Le fichier setup.py est une convention de distutils, la gestion des paquets de bibliothèque standard Python "solution." distutils est manquant quelques fonctionnalités clés et setuptools est un package tiers largement utilisé qui "embrasse et étend" distutils pour fournir des fonctionnalités supplémentaires. setuptools utilise également setup.py. easy_install est le programme d'installation fourni avec setuptools. Le développement de Setuptools a stagné pendant plusieurs années, et distribute était une fourchette de setuptools pour réparer quelques bogues de longue date. Finalement, la fourchette a été résolue avec une fusion de redistribuer dans setuptools, et le développement de setuptools est à nouveau actif (avec un nouveau responsable).

distutils2 était une nouvelle version principalement réécrite de distutils qui tentait d'incorporer les meilleures idées de setuptools/distribute, et était supposée faire partie de la bibliothèque standard Python. Malheureusement cet effort a échoué, donc pour l'instant setuptools reste la norme de facto pour l'empaquetage Python.

Pip remplace easy_install, mais il ne remplace pas setuptools; il nécessite setuptools et construit dessus. Ainsi, il utilise également setup.py.

Is virtualenv only for development mode, or should the users also install it?

Il n'y a pas de bonne réponse à cela; il peut être utilisé de toute façon. Au final, c'est vraiment le choix de votre utilisateur, et votre logiciel devrait idéalement pouvoir être installé à l'intérieur ou à l'extérieur d'un virtualenv; Cependant, vous pouvez choisir de documenter et de souligner une approche ou l'autre. Cela dépend beaucoup de qui sont vos utilisateurs et de l'environnement dans lequel ils sont susceptibles d'avoir besoin d'installer votre logiciel.

Will the resulting package be installed with the minimum requirements (like the current egg), or will it be installed with sources & binaries for all dependencies plus all the build tools, creating a gigabyte monster in the virtual environment?

Si un paquet nécessitant une compilation est installé via pip, il devra être compilé à partir de la source. Cela s'applique également à toutes les dépendances qui nécessitent une compilation.

Ceci n'est pas lié à la question de savoir si vous utilisez un virtualenv. easy_install est disponible par défaut dans un virtualenv et fonctionne très bien là-bas. Il peut installer des oeufs binaires précompilés, comme il le fait en dehors d'un virtualenv.

Will the users have to modify their $PATH and $PYTHONPATH to run the resulting package if it's installed in a virtual environment?

Pour utiliser quoi que ce soit installé dans un virtualenv, vous devez utiliser le binaire python dans le répertoire bin/ du virtualenv (ou un autre script installé dans le virtualenv qui fait référence à ce binaire). La façon la plus courante de le faire est d'utiliser le script activate ou activate.bat de virtualenv pour modifier temporairement le shell PATH de sorte que le répertoire bin/ de virtualenv est le premier. La modification de PYTHONPATH n'est généralement pas utile ou nécessaire avec virtualenv.

Do I need to create a script from a text string for virtualenv like in the bad old days?

n °

What is with the #egg=Package URL syntax? That's not part of the standard URL, so why isn't it a separate parameter?

Le hack fragment d'URL "# oeuf = projectname version" a été la première introduced by setuptools and easy_install. Comme easy_install récupère les liens du web pour trouver les distributions candidates à installer pour un nom de paquet et une version donnés, ce bidouillage a permis aux auteurs de paquets d'ajouter des liens sur PyPI faciles à comprendre, même s'ils n'utilisaient pas les conventions de nommage standard de easy_install .

Where is @rev included in the URL? At the end I suppose, but the documentation is not clear about this ("You can also include @rev in the URL").

A deux phrases après fragment cité il y a un lien pour « lire the requirements file format pour se renseigner sur d'autres caractéristiques. » La fonctionnalité @rev est entièrement documentée et démontrée ici.

What is supposed to be understood by using an existing requirements file as "as a sort of template for the new file"? This could mean any number of things.

La phrase suivante dit « il gardera les paquets listés dans devel-req.txt en ordre et conserver les commentaires. » Je ne suis pas sûr de ce que serait une description plus concise.

+0

Wow, merci! Beaucoup de matière à réflexion ici. – l0b0

+0

Vraiment apprécier la question et la solution descriptive comme ça :) – Drake

4

Je ne peux pas répondre à toutes vos questions, mais j'espère que ce qui suit est utile. Les codes virtualenv et pip sont tous deux très utilisables. De nombreux développeurs Python les utilisent tous les jours.

Puisque vous avez un travail easy_install, la meilleure façon d'installer à la fois est la suivante:

easy_install pip 
easy_install virtualenv 

Une fois que vous avez virtualenv, il suffit de taper virtualenv yourEnvName et vous aurez votre nouvel environnement virtuel python dans un répertoire nommé yourEnvName. À partir de là, c'est aussi simple que source yourEnvName/bin/activate et l'interpréteur virtuel Python sera votre actif.Je ne sais rien à propos de matplotlib, mais à la suite de l'installation, les interactions devraient s'arranger, à moins qu'il y ait des problèmes étranges de chemin codés en dur.

Si vous pouvez installer quelque chose via easy_install vous pouvez généralement l'installer via pip. Je n'ai rien trouvé que easy_install pourrait faire que pip ne pourrait pas.

Je ne compte pas sur les utilisateurs pouvant installer virtualenv (cela dépend de qui sont vos utilisateurs). Techniquement, un interpréteur python virtuel peut être traité comme un vrai dans la plupart des cas. Son utilisation principale n'est pas d'encombrer les paquets de site de l'interpréteur réel et si vous avez deux bibliothèques/applications qui nécessitent des versions différentes et incompatibles de la même bibliothèque.

Si vous ou un utilisateur installez quelque chose dans un virtualenv, il ne sera pas disponible dans d'autres virtualenvs ou l'interpréteur Python du système. Vous devez utiliser la commande source /path/to/yourvirtualenv/bin/activate pour basculer vers un environnement virtuel sur lequel vous avez installé la bibliothèque. Ce qu'ils entendent par "comme une sorte de modèle pour le nouveau fichier" est que la commande pip freeze -r devel-req.txt > stable-req.txt créera un nouveau fichier stable-req.txt basé sur le fichier existant devel-req.txt. La seule différence sera que tout ce qui n'est pas déjà spécifié dans le fichier existant sera dans le nouveau fichier.

Questions connexes