2009-07-04 7 views
3

Hé les gars, j'ai un problème de python de mise à niveau de 2,4 à 2,6:Transition de Python2.4 en Python2.6 sur CentOS. problème de migration du module

Je CentOS 5 (Full)
Il a python 2.4 vivant dans /usr/lib/python2.4/
des modules supplémentaires vivent dans /usr/lib/python2.4/site-packages/

J'ai construit python 2.6 à partir de sources à /usr/local/lib/python2.6/
J'ai mis en python par défaut à python2.6
Maintenant les anciens modules pour 2.4 sont en pythonpath et sont "perdus"
icular, yum est cassé ("no module named yum")

Alors, quelle est la bonne façon de migrer/installer des modules sur python2.6?

Répondre

3

Ils ne sont pas cassés, ils ne sont simplement pas installés. La solution à cela est de les installer sous 2.6. Mais d'abord nous devrions voir si vous devriez vraiment faire cela ...

Oui, Python, lorsqu'il est installé, remplace la commande python par la version installée (sauf si vous l'exécutez avec --alt-install). Vous n'indiquez pas exactement quel est votre problème, alors je vais deviner. Votre problème est que de nombreuses commandes locales utilisant Python échouent maintenant, car elles sont exécutées avec Python 2.6 et non avec Python 2.4. Est-ce exact?

Si tel est le cas, supprimez simplement/usr/local/bin/python et assurez-vous que/usr/bin/python est un lien symbolique vers /usr/bin/python2.4. Ensuite, vous devrez taper python2.6 pour lancer python2,6, mais c'est OK. C'est la meilleure façon de le faire. Ensuite, vous avez seulement besoin d'installer les paquets besoin dans 2.6.

Mais si ma supposition est fausse, et vous avez vraiment besoin d'installer tous ces paquets sous 2.6, alors ne vous inquiétez pas trop. Tout d'abord, installez setuptools. Il comprend un script easy_install, et vous pouvez alors installer des modules avec

easy_install <modulename> 

Il téléchargera le module de pypi.python.org et l'installer. Et il va également installer n'importe quel module qui est une dépendance. easy_install peut installer n'importe quel module qui utilise distutils en tant qu'installateur, et pas beaucoup ne le font pas. Cela facilitera l'installation de 90% de ces modules. Si le module a un composant C, il le compilera, et vous aurez aussi besoin des en-têtes de la bibliothèque, ce qui sera plus de travail, et tout ce que vous pouvez faire est de les installer de la manière standard de CentOS.

Vous ne devez pas utiliser de liens symboliques entre les versions, car les bibliothèques sont généralement destinées à une version particulière. Pour 2.4 et 2.6 je pense que les fichiers .pyc sont compatibles (mais je ne suis pas sûr à 100%), donc cela peut fonctionner, mais tout module qui utilise C sera pause. Et d'autres versions de Python auront également des fichiers .pyc incompatibles. Et je suis sûr que si vous faites cela, la plupart des gens Python ne vont pas vous aider si vous le faites. ;-)

En général, j'essaie aussi de garder le système python "propre", par exemple. Je n'installe rien là-bas qui ne soit installé avec les outils d'emballage. Au lieu de cela, j'utilise virtualenv ou buildout pour que chaque application ait son propre chemin python où vivent ses dépendances. Donc, chaque projet que j'ai a son propre ensemble de bibliothèques. Cela devient plus facile de cette façon.

+1

Merci! Après avoir rétabli Python par défaut à 2.4, yum est de retour à la vie. –

0

Il y a quelques options ...

  1. Si les modules fonctionneront sous Python 2.6, vous pouvez simplement créer des liens symboliques vers les à partir du répertoire 2.6 site-packages aux 2.4 site-packages annuaire.

  2. S'ils ne s'exécutent pas sous 2.6, vous devrez peut-être les recompiler avec la version 2.6 ou en installer des versions à jour. Assurez-vous que vous utilisez 2.6 lorsque vous appelez "python setup.py"

...

Vous pouvez poster ceci sur serverfault.com, si vous avez des défis supplémentaires.

+0

Merci gahooa! Actuellement, il existe environ 100 modules dans 2.4/packages de sites. Je ne suis pas très heureux tp créer 100 liens symboliques ... Et pour exécuter setup.py je dois localiser toutes les sources et deviner toutes les dépendances pour l'ordre correct de l'installation. Je pense qu'il devrait y avoir une solution "du livre". –

0

Certaines bibliothèques Python peuvent toujours ne pas être accessibles comme avec Python 2.6 site-packages est devenu dist-packages.

La seule manière dans ce cas est de déplacer tous les éléments générés dans les packages de site (par exemple par make install) vers des dist-packages et de créer un lien symbolique.

0

easy_install est bon, mais il y a moyen de bas niveau pour l'installation du module, il suffit:

  1. déballer source de module pour un répertoire
  2. de type "python setup.py install"

de Bien sûr, vous devriez le faire avec la version requise de l'interpréteur python installé; pour vérifier le type:

python -V

Questions connexes