Nous avons une installation commune de Python pour tous nos systèmes afin de garantir que chaque système ait la même installation de Python et de faciliter les problèmes de configuration. Cette installation est située sur un lecteur partagé. Nous avons également plusieurs plates-formes qui partagent cette installation. Nous contournons des fichiers spécifiques à la plate-forme conflictuels en définissant l'option de configuration --Exec-préfixe lors de la compilation de Python. P>
Mon problème est que je veux maintenant installer un ovule à l'aide de easy_install (ou autrement) qui dépend de la plate-forme. EASY_INSTALL met l'oeuf dans le répertoire des packages de site de la partie indépendante de la plate-forme de l'installation. Le nom de l'œuf a la plate-forme dedans qu'il ne devrait y avoir aucun conflit. Mais Python ne chargera que le premier qu'il trouve. (Donc, sur Solaris, cela pourrait essayer de charger l'œuf Linux). Modification du fichier Easy-Install.pth peut changer lequel il trouve, mais c'est assez inutile. P>
Je peux déplacer les fichiers .gg dans un répertoire de packages dépendant de la plate-forme, puis utilisez pkg_resources.require () pour les charger (ou régler manuellement le chemin). Mais il semble que je ne devrais pas avoir à devoir depuis la plate-forme du nom de l'œuf. P>
Y a-t-il une manière plus générique que je peux vous assurer que Python chargera l'œuf de la plate-forme correcte? P>
4 Réponses :
Python a suffisamment de crochets pour rendre cela possible mais ce n'est probablement pas sage. Si vous souhaitez vraiment mettre en œuvre cela, consultez PEP 302 et commencer le piratage sur le Vous seriez probablement bien mieux de garder une trace de laquelle des packages de python que vous souhaitez installer. Vous pouvez par exemple écrire votre propre package Python qui dépend simplement de l'ensemble souhaité. P> easy_install code> ou
distribuer code>
source code. Comme vous le savez, il n'y a pas vraiment de logique dans easy-install.pth code>. P>
Et / ou utilisez le package Python Virtualenv pour gérer vos forfaits juste pour ce projet
Essayez virtualenv ... http://pypi.python.org/pypi/virtualenv ... vous aide à créer un environnement isolé avec son propre interprète Python + Site_Packages Dossier. Ainsi, vous n'avez jamais de conflits avec des packages installés dans le chemin local. P>
Qu'est-ce que j'ai fini par aller avec qui déplaçait manuellement l'œuf dépendant de la plate-forme dans le répertoire des packages de site spécifique à la plate-forme (comme spécifié à http://docs.python.org/install/index.html ). Ensuite, j'ai fait un autre autre répertoire facile à installer, énumérant les œufs à installer. P>
Ce serait beaucoup plus pratique si easy_install devait honorer EXEC_PREFIX et mettre des œufs dépendants de la plate-forme dans la "distribution de modules non pur". Peut-être que je vais demander cela des personnes easy_install. P>
Utilisez "easy_install -m" pour installer tous les packages spécifiques à la plate-forme, de sorte qu'il n'y a pas de version par défaut sur Sys.Path. De cette façon, la résolution de la version a lieu au moment de l'exécution et les informations de la plate-forme seront prises en compte. P>
L'œuf contient-il des extensions C, ou est-ce que c'est python pur?
Ouais, il y a une extension C. Sinon, peu importe que le code ne serait pas dépendant de la plate-forme. Plus précisément, c'est le module PYPERFORCE, au cas où vous êtes curieux.