繁体   English   中英

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

[英]How can I move my Python2.6 site-packages into Python2.7?

我刚刚在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一样简单吗?

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

我建议以2.6套餐的方式将软件包安装到2.7中。 我不建议你复制文件。

安装文件的合理方法是:

  1. easy_install的

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

  2. 点子安装

    得到这样的点子: sudo easy_install pip

  3. apt-get install
  4. wget and untar

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

大多数发行版都提供了比这样的手动摆弄更加灵活的升级Python模块的方法,所以也许有人能够给出Arch特定部分的答案吗?

干净的方式是重新安装。 然而,对于许多(如果不是大多数)纯python包, mv方法将起作用

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

尝试这样的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM