安全删除 Ubuntu 中的 Python 版本

132 阅读4分钟

用户在 Ubuntu 系统中安装了两个相同版本的 Python,一个位于 /usr/bin/,另一个位于 /usr/local/bin 目录下。但是,当用户在命令行中输入 python 时,系统会默认使用 /usr/local/bin 目录中的 Python 版本。用户希望使用 /usr/bin/ 目录中的 Python 版本,因为该版本与他正在使用的许多导入库(如 numpy、matplotlib 和 Tkinter)兼容。

用户已经尝试使用 pyenv 来管理 Python 版本,但发现无法运行 Tkinter,因为 Tkinter 只安装在 /usr/bin/ 目录中的 Python 版本中。

2、解决方案

方法一:调整 PYTHONPATH 环境变量

如果这两个 Python 安装是完全相同的(版本相同),那么没有理由不能将一个版本安装的 Python 软件包与另一个版本一起使用。您只需调整 PYTHONPATH 环境变量即可。

具体做法如下:

export PYTHONPATH=/usr/lib/python2.7/site-packages

或者,根据实际情况调整 PYTHONPATH 环境变量。您可以通过显式启动 Python 并查看 sys.path 来找到标准(系统)Python 安装软件包的路径。 也可以更简单,直接为想要使用的 Python 版本创建别名(不要将别名命名为 python,因为它会造成很多混乱):

alias py2=/usr/bin/python

然后使用这个别名来代替。

方法二:使用 virtualenv 创建虚拟环境

如果没有更多的知识来了解您是如何陷入当前状况的,那么就无法保证任何方法都是“安全的”。 如果您使用 pip 或类似工具安装了 Python 软件,那么它将安装到您的系统首选的 Python 版本,即 /usr/local/bin 中的版本。 系统提供的 /usr/bin 中的版本可能不应该被触及或删除。如果您使用 apt-get install(或其相关工具,如 aptitude、Synaptic 等)安装了组件,那么它们将被安装到系统 Python 中。 从本质上说,Apt 和 pip 正在竞争管理您的 Python 代码,而混合使用它们最终会导致无法简单协调的情况。如果您只使用其中一个,那么您应该可以轻松管理已经安装的代码,并在需要时对其进行修改。 我建议使用 virtualenv,也许作为实现单一安装的第一步;但我想您会发现实际上可以舒适地使用多个 Python 版本。有了 virtualenv,您就不依赖于系统范围内安装的任何内容了。 通常,您会为每个正在处理的 Python 项目设置(至少)一个虚拟环境,并仅填充该特定项目所需的库。例如,要为使用系统 Python 设置一个虚拟环境并使用您指定的库,您可以执行以下操作:

vnix$ virtualenv -p /usr/bin/python myproject

vnix$ ./myproject/bin/activate

(myproject) vnix$ pip install numpy matplotlib # Tkinter is part of standard Python install

(myproject) vnix$ emacs myproject.py &  # hack away

虚拟环境包含您的裸 Python 安装的副本(尽管所有电池都已包含在内,这几乎不是“裸”的),并且在虚拟环境处于活动状态时您通过 pip 安装的任何内容都将只安装在虚拟环境内。这样,您可以很好地隔离依赖项,并且只需从一个虚拟环境切换到另一个虚拟环境即可处理即使具有冲突要求的软件。 因此,如果您愿意,可以创建一个使用本地安装的 Python 的第二个虚拟环境,并在该虚拟环境内安装 Tkinter,只需在环境处于活动状态时运行 pip install 即可。

(myproject) vnix$ deactivate

vnix$ cd ..

vnix$ virtualenv myproject-local

vnix$ . ./myproject-local/bin/activate

(myproject-local) vnix$ pip install numpy matplotlib Tkinter

不确定您如何在 Python 安装中最终没有 Tkinter,因此也不确定您将如何在其中安装它。 pip install Tkinter 至少在我这里不起作用,因此可能还需要额外的技巧。安装 Python 的 tkinter 似乎是相关的。在 /usr/local 中重建并重新安装 Python,这次使用 Tkinter,似乎是一个合理的解决方案,尽管有点不吸引人。 顺便说一句,您可能希望将项目放入版本控制中;没有必要将虚拟环境放在那里,事实上,如果您愿意,virtualenv 完全可以在您的源代码树之外正常工作。作为极端的例子,您可以在 /tmp 中创建您的虚拟环境并在重新启动时将其删除;虚拟环境树在磁盘上的位置并不重要。(也许您希望在版本控制中包含 requirements.txt,以便您可以轻松地重新创建虚拟环境,尽管如此。pip install -r requirements.txt 将一次安装文件中列出的所有必需程序包。)