2010-10-19 6 views
4

Je viens de lancer une mise à jour sur ArchLinux qui m'a donné Python3 et Python2.7.Comment puis-je déplacer mon site-packeges Python2.6 dans Python2.7?

Avant cette mise à jour, j'utilisais Python2.6. Les modules que j'ai installés résident dans /usr/lib/python2.6/site-package. Je veux maintenant utiliser Python2.7 et supprimer Python2.6.

Comment puis-je déplacer mes modules Python2.6 dans Python2.7?

Est-ce aussi simple que de faire mv /usr/lib/python2.6/site-packages/* /usr/lib/python2.7/site-packages?

+0

Vous pouvez essayer, mais les paquets ne fonctionne pas parce qu'ils sont incompatibles avec Python 2.7. –

+0

En supposant qu'il n'y a pas de problèmes de compatibilité, déplacer le dossier site-packages dans le dossier lib de Python2.7 va installer les modules avec succès? – dave

+0

Le déplacement peut fonctionner pour des packages non binaires, mais des modifications de l'API ont pu provoquer l'échec des packages 2.6 sur 2.7. Par exemple, l'API PyCObject a été dépréciée en 2.7. –

Répondre

0

Pas une réponse complète: Ce n'est pas aussi simple qu'un mv. Les fichiers sont compilés en octets dans des fichiers .pyc spécifiques aux versions python. Donc, à tout le moins, vous devrez régénérer les fichiers .pyc. (Les supprimer devrait aussi être suffisant.) La régénération peut être effectuée en utilisant compileall.py.

La plupart des distributions offrent une façon plus simple de mettre à niveau les modules Python que le tri manuel, alors peut-être que quelqu'un d'autre peut donner à l'Arch une partie spécifique de la réponse?

0

La voie propre serait ré-installer. Cependant, pour beaucoup sinon la plupart des paquets purs python l'approche mv fonctionnerait

1

Votre question est vraiment, "Comment puis-je obtenir les paquets que j'ai dans python 2.6 dans ma [nouvelle] configuration de python 2.7? Copierait les fichiers travail?"

Je recommanderais d'installer les paquets dans 2.7 de la même manière que vous avez fait vos paquets 2.6. Je ne vous recommanderais pas de copier les fichiers.

moyens raisonnables pour installer les fichiers sont:

  1. easy_install

    Get easy_install comme ceci: wget http://python-distribute.org/distribute _setup.py && sudo python ./distribute_setup.py

  2. Pip installer

    Obtenez pip comme ceci: sudo easy_install pip

  3. apt-get install
  4. wget et décompressez
0

Vous pourriez vouloir « easy_install yolk », qui peut être invoquée comme « yolk -l » pour vous donner une liste facile à lire de tous les paquets installés.

0

Essayez quelque chose comme ceci:

#!/usr/bin/env python 

import os 
import os.path 
import subprocess 
import sys 
import tempfile 

def distributions(path): 
    # Extrapolate from paths which distributions presently exist. 
    (parent, child) = os.path.split(path) 
    while child is not '' and not child.startswith('python'): 
     (parent, child) = os.path.split(parent) 
    if len(child) > 0: 
     rel = os.path.relpath(path, os.path.join(parent, child)) 
     ret = [] 
     for distro in os.listdir(parent): 
      if distro.startswith('python'): 
       dir = os.path.join(os.path.join(parent, distro), rel) 
       if os.path.isdir(dir): 
        ret.append((distro, dir)) 
     ret.sort() 
     return ret 
    return [] 

def packages(dir): 
    return [pkg.split('-')[0] for pkg in os.listdir(dir)] 

def migrate(old, new): 
    print 'moving all packages found in ' + old[0] + ' (' + old[1] + ') to ' + new[0] + ' (' + new[1] + ')' 
    f = tempfile.TemporaryFile(mode = 'w+') 
    result = subprocess.call(
     ['which', 'easy_install'], stdout = f, stderr = subprocess.PIPE) 
    f.seek(0) 
    easy_install = f.readline().strip() 
    f.close() 
    if os.path.isfile(easy_install): 
     pkgs = packages(old[1]) 
     success = [] 
     failure = [] 
     for pkg in pkgs: 
      # Invoke easy_install on the package 
      print 'installing "' + pkg + '" for ' + new[0] 
      result = subprocess.call(
       [new[0], easy_install, pkg]) 
      if result != 0: 
       failure.append(pkg) 
       print 'failed' 
      else: 
       success.append(pkg) 
       print 'success' 
     print str(len(success)) + ' of ' + str(len(pkgs)) + ' succeeded' 
    else: 
     print 'Unable to locate easy_install script' 

if __name__ == '__main__': 
    package_path = sys.path[-1] 
    distros = distributions(package_path) 
    migrate(distros[0], distros[1]) 
    list(package_path) 
Questions connexes