在Ubuntu中删除1个版本的Python

Remove 1 version of Python in Ubuntu

所以显然我在不同的文件夹中安装了2个Pythons(相同版本)...一个在/usr/bin/中,另一个在/usr/local/bin中,但是当我输入python时shell使用的那个是/usr/local/bin。 我想使用/usr/bin/版本,因为它适用于我一直在处理的许多导入,例如numpymatplotlibTkinter

我尝试过使用pyenv,但是由于Tkinter只能为/usr/bin/版本安装,因此我无法运行Tkinter

  • 有没有一种安全的方法可以删除/卸载其中一个版本
    没有破坏我的整个Ubuntu?

  • 有没有办法告诉shell使用/usr/bin/版本的
    Python?

  • 有没有办法为任何envpy版本安装python-tk
    sudo apt-get install python-tk in-desired-folders
    类似?

我认为,回答这3个问题中的任何一个都可以解决我的问题。

谢谢大家的建议!


如果这两个Python安装相同(相同的Python版本),则没有理由不能将一个版本的Python软件包与另一个版本一起使用。 你只需要调整你的PYTHONPATH

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

或其变体,取决于Python安装其软件包的标准(系统)的确切位置。

您可以通过显式启动Python并查看sys.path来找到后者。 在我的Ubuntu系统上,例如:

1
2
3
4
5
6
7
> /usr/bin/python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type"help","copyright","credits" or"license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/evert/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

我的PYTHONPATH应该设置为

1
export PYTHONPATH=/usr/lib/python2.7/dist-packages

代替。

或者,甚至可能更容易,只需为要使用的Python创建一个别名(只是不要命名别名python;它会产生很多混乱):

1
alias py2=/usr/bin/python

并使用它。

在任何一种情况下,都不需要删除/usr/local/中的任何内容(或者甚至将/usr/bin/放在PATH的前面); 你只需移动/ usr / local目录/ Python就可以了。


如果不了解你最终如何到达目的地,就无法保证"安全"。

如果您使用pip或类似软件来安装Python软件,那么它将安装在您的系统所选择的任何Python版本中,这意味着/usr/local/bin中的版本。

不应触及或删除/usr/bin中系统提供的版本。如果使用apt-get install(或其堂兄,aptitude,Synaptic等)安装组件,则系统将为系统Python安装它们。

从根本上说,Apt和pip正在竞争管理你的Python代码,混合它们最终会导致没有简单的协调方式。如果您只使用其中一个,则应该很容易管理已安装的代码,并在需要时进行修改。

我建议使用virtualenv,这可能是单个安装的第一步;但是我希望你会发现你可以在多个Python版本中轻松地生活。使用virtualenv,您首先不依赖于系统范围内安装的内容。

通常,您将为您正在处理的每个Python项目设置(至少)一个虚拟环境,并仅使用该特定项目所需的库填充它。因此,例如,要设置virtualenv以使用系统Python并使用您指定的库,您可以执行类似的操作

1
2
3
4
5
6
7
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安装的副本(虽然这几乎不是"裸",包含所有电池)和virtualenv处于活动状态时pip install的任何内容只会安装在虚拟环境中。这样,您可以很好地隔离依赖关系,并且即使只是通过从一个虚拟环境切换到另一个虚拟环境而具有冲突的需求,也可以处理软件。

因此,如果您愿意,可以使用本地安装的Python创建第二个虚拟环境,并在环境激活时通过运行pip install在该虚拟环境中安装Tkinter。

1
2
3
4
5
6
7
8
9
(myproject) vnix$ deactivate

vnix$ cd ..

vnix$ virtualenv myproject-local

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

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

(不确定如果没有Tkinter在你的Python安装中如何结束,所以也不确定如何在那里安装它。pip install Tkinter似乎至少在我所处的地方不起作用,所以可能需要额外的黑客攻击。为Python安装tkinter似乎是相关的。在/usr/local中重建和重新安装Python,这次是使用Tkinter,看起来似乎是一种看似合理的解决方案。虽然有点没有吸引力。)

另外,您可能希望您的项目处于版本控制之下;虚拟环境不需要在那里结束,事实上,如果您愿意,virtualenv可以完全在源树之外完成。作为一个极端的例子,您可以在/tmp中创建虚拟环境并在重新启动时将其删除; virtualenv树在磁盘上的位置并不重要。 (也许您希望在版本控制中使用requirements.txt,以便您可以轻松地重新创建虚拟环境。pip install -r requirements.txt将一次性安装文件中列出的所有必需软件包。)


您可以删除整个/ usr / local目录,系统不会受到影响,因为/ usr / local是用户单独定义的目录。当你刚刚安装Ubuntu / usr / local时为空