如何将Python2.6站点包移动到Python2.7中?

时间:2010-10-19 12:34:38

标签: python module

我刚刚在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 个答案:

答案 0 :(得分:1)

你的问题是,“我怎样才能将我在python 2.6中的软件包放到我的[new] python 2.7配置中?复制文件是否有效?”

我建议将套餐安装到2.7中,方法与2.6套餐相同。我不建议您复制文件。

安装文件的合理方法是:

  1. easy_install

    像这样获取easy_install:wget http://python-distribute.org/distribute_setup.py && sudo python ./distribute_setup.py

  2. pip install

    得到这样的点子:sudo easy_install pip

  3. apt-get install
  4. wget and untar

答案 1 :(得分:0)

不是一个完整的答案:它不像mv那么简单。这些文件被字节编译成.pyc文件,这些文件特定于python版本。所以至少你必须重新生成.pyc文件。 (删除它们也应该足够了。)可以使用compileall.py完成重新生成。

大多数发行版都提供了一种更加理智的方式来升级Python模块而不是像这样的手动摆弄,所以也许有人可以给Arch特定部分答案吗?

答案 2 :(得分:0)

干净的方式是重新安装。但是,对于许多(如果不是大多数)纯python包,mv方法可以正常工作

答案 3 :(得分:0)

您可能想要“easy_install yolk”,可以将其作为“yolk -l”调用,以便为您提供所有已安装软件包的易于阅读的列表。

答案 4 :(得分:0)

尝试这样的事情:

#!/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)