Как я могу переместить мои пакеты сайта Python2.6 в Python2.7? - PullRequest
4 голосов
/ 19 октября 2010

Я только что запустил обновление для ArchLinux, которое дало мне Python3 и Python2.7.

До этого обновления я использовал Python2.6. Модули, которые я установил, находятся в /usr/lib/python2.6/site-package. Теперь я хочу использовать Python2.7 и удалить Python2.6.

Как я могу переместить мои модули Python2.6 в Python2.7?

Это так же просто, как делать mv /usr/lib/python2.6/site-packages/* /usr/lib/python2.7/site-packages?

Ответы [ 5 ]

1 голос
/ 19 октября 2010

Ваш вопрос действительно: «Как я могу получить пакеты, которые у меня есть в python 2.6, в мою [новую] конфигурацию python 2.7? Будет ли копирование файлов работать?»

Я бы порекомендовал установить пакеты в 2.7так же, как вы сделали ваши пакеты 2.6.Я бы не рекомендовал вам копировать файлы.

Разумные способы установки файлов:

  1. easy_install

    Получите easy_install следующим образом: wget <a href="http://python-distribute.org/distribute" rel="nofollow">http://python-distribute.org/distribute</a>_setup.py && sudo python ./distribute_setup.py

  2. pip install

    Получить pip следующим образом: sudo easy_install pip

  3. apt-get install
  4. wget и untar
0 голосов
/ 26 октября 2010

Попробуйте что-то вроде этого:

#!/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)
0 голосов
/ 25 октября 2010

Возможно, вы захотите набрать 'easy_install yolk', который может быть вызван как 'yolk -l', чтобы получить удобный для чтения список всех установленных пакетов.

0 голосов
/ 19 октября 2010

Чистым способом будет переустановка.Однако для многих, если не для большинства чистых пакетов Python, подход mv будет работать

0 голосов
/ 19 октября 2010

Не полный ответ: это не так просто, как mv. Файлы байт компилируются в файлы .pyc, которые являются специфическими для версий Python. Так что, по крайней мере, вам придется восстановить файлы .pyc. (Их тоже должно быть достаточно.) Восстановление можно выполнить с помощью compileall.py.

Большинство дистрибутивов предлагают более разумный способ обновления модулей Python, чем ручное переключение, как это, поэтому, может быть, кто-то еще может дать Arch конкретную часть ответа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...