我刚刚在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
一样简单?
答案 0 :(得分:1)
你的问题是,“我怎样才能将我在python 2.6中的软件包放到我的[new] python 2.7配置中?复制文件是否有效?”
我建议将套餐安装到2.7中,方法与2.6套餐相同。我不建议您复制文件。
安装文件的合理方法是:
easy_install
像这样获取easy_install:wget http://python-distribute.org/distribute_setup.py && sudo python ./distribute_setup.py
pip install
得到这样的点子:sudo easy_install pip
答案 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)