如何将旧版本Python的库迁移到新版本Python

1 投票
4 回答
4199 浏览
提问于 2025-04-16 10:31

我在使用Ubuntu系统,安装了新版的Python。但是我之前安装的库,比如imdbPy、NumPy、Cython等,都是在旧版Python 2.6.6上能正常运行的。

当我在2.6.6版本中导入Cython时,它可以正常工作,但我在2.7.0及以上版本中尝试同样的操作时,

import cython

出现了如下错误:

import cython
ImportError: No module named cython

我想要做的是更改在bash中使用的默认Python版本。我觉得可以通过修改bash的配置文件来实现这个目标。同时,我也想把这些库移动到合适的位置,这样新版Python就能永久访问它们。

4 个回答

0

你需要为新版本重新安装所有的库。

我建议你先下载并安装pip。安装好之后,你可以用这个命令来安装大部分的包:/path/to/Python27/bin/pip install <packagename>,比如说:

/opt/python27/bin/pip install Cython
0

显然,使用一个包管理工具是个好主意,因为它可以帮你设置我接下来要提到的所有内容(还可以检查兼容性和依赖关系)。不过,如果你在使用你选择的包管理器时遇到问题,这里有一些可能有用的建议:

在你做任何更改之前,先用 echo $PATH 在 bash 中检查一下 PATH。这里列出的目录是按搜索顺序排列的。

你可以通过调整 PATH 中目录的顺序来确定 bash 使用的是哪个版本的 Python,确保你想要的版本排在最前面。

比如说,如果你想使用 opt/local/bin 中的 Python 版本,而不是 usr/local/bin 中的,你可以在你的 .bash_profile.bashrc 文件中添加一行:

export PATH=opt/local/bin:$PATH

你可以用以下命令检查 bash 正在使用的 Python 文件路径:

which python(在 bash 中输入这条命令)

至于库,确保 bash 中的 PYTHONPATH 和 Python 中的 sys.path 设置正确,这样它才能找到合适的库,并使用更新的、兼容的版本,而不是旧版本。你还可以创建 .pth 文件,里面包含你想添加到 sys.path 的目录路径,并可以在 bash 中使用 PYTHONSTARTUP 来启动时运行一个模块,设置 sys.path

除非你为特定版本的 Python 有一整套新的库放在一个单独的文件夹里,否则你可能会遇到问题,特别是因为许多库会依赖其他库,因此可能会使用彼此的过时版本。

如果你的 sys.path 中有多个模块使用相同的名称,它们可能会发生冲突。

你可以这样检查你导入的 Python 模块的目录路径:

import Cython
print Cython.__file__

希望这些问题都能由你选择的包管理器来处理,但如果遇到麻烦,至少可以仔细检查一下你的路径。

2

不要随便动你的系统安装,应该让包管理器来处理这些事情。当你从源代码安装软件时,确保在一个单独的目录里进行。

我通常在我的个人目录下安装东西。我喜欢使用jhbuild,这个工具可以让我同时管理多个版本的Python:https://thomas.apestaart.org/thomas/trac/browser/jhbuild/python

从这个代码库运行make命令会构建Python 2.3到2.7,并创建一些脚本来进入它们的环境:

[thomas@level ~]$ py-2.4 
Entering interactive py shell /bin/bash
[py-2.4] [thomas@level ~]$ python
Python 2.4.5 (#1, Dec 16 2010, 18:51:06) 
[GCC 4.4.4 20100630 (Red Hat 4.4.4-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

撰写回答