我是否通过运行“sudo apt-get purge ./python”造成了任何损害?

Sar*_*STA 6 python apt

如您所知,Ubuntu 中已经有了python。但是,我已经下载了最新的 3.5.1 版本的源代码并使用编译它

./configure
make
make test
sudo make install
Run Code Online (Sandbox Code Playgroud)

pwd的这一刻是/home/SarpSTA/Downloads/Python-3.5.1

我想purge在这个新安装上运行。

sudo apt-get purge python不会,因为它的路径运行的是旧版本而不是新安装。因此,虽然仍在文件夹中,但我运行了sudo apt-get purge ./python. 它创建了一个很长的输出,如下所示:

E: Release 'python' for 'package-name' was not found

对于我在计算机上安装的每个包,代替package-name.

我删除了什么还是代码只是失败?

Edu*_*ola 15

这不是它的工作原理。您只能使用apt-get purge由 APT 或 dpkg 安装的软件包(Debian .deb 软件包)。如果您从源代码编译您的软件,APT 将不会跟踪它。

如果你还有你的源代码文件夹,cd进入它并运行sudo make uninstall. 这个命令应该删除编译的软件。

如果您不再拥有源代码,我建议您再次下载它,./configure在其中运行,然后sudo make uninstall.

非常小心,不要删除默认的Python安装。它是 Ubuntu 的一个非常重要的部分,如果你删除它,你的系统就会损坏。

所以不,你没有通过运行造成任何损害sudo apt-get purge ./python,因为找不到包。

  • -1 表示没有真正回答通过运行“apt-get purge”命令造成任何损害的明确问题。 (6认同)

L. *_*mes 7

不,那个命令没有造成任何损害。它什么也没做,只是给你一条错误消息,表明它无法执行任务。

至于尝试清除已安装的版本,您不必清除它,只需创建一个指向默认安装版本的符号链接即可。当然,您也可以通过已安装版本的完整路径名调用 python。

例子:

$ /usr/bin/python3.7 myprogram.py
Run Code Online (Sandbox Code Playgroud)

正确的卸载命令是将包名称作为 remove 参数。

删除包的示例:

$ sudo apt-get remove python
Run Code Online (Sandbox Code Playgroud)

你可以通过运行来告诉你系统上的当前符号链接:

$ ls -l /usr/bin/python*
Run Code Online (Sandbox Code Playgroud)

上面的命令还将向您显示碰巧安装的其他版本。

当然很多程序使用shebang( #!)来指定要运行的程序解释器。您可以通过运行以下命令查看此示例:

$ egrep python * | egrep "/usr/bin/python"
Run Code Online (Sandbox Code Playgroud)

上述命令的输出将显示要运行的指定版本的各种 Python 应用程序的名称。要运行的程序和命令在列表中用冒号分隔。


mur*_*uru 7

要了解apt-get purge ./python尝试做什么,让我们按照联机帮助页。一、一般语法:

apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file]
        [-t=target_release] [-a=architecture] {update | upgrade |
        dselect-upgrade | dist-upgrade |
        install pkg [{=pkg_version_number | /target_release}]...  |
        remove pkg...  | purge pkg...  |
        source pkg [{=pkg_version_number | /target_release}]...  |
Run Code Online (Sandbox Code Playgroud)

你会看到它apt-get支持通过/foo. 因此,在 中./pythonapt-get解释python为目标版本。我们稍后会回到这个问题。

现在.呢?apt-get支持正则表达式,如果包名称中包含.*等等,它将把它作为一个正则表达式。并apt-get检查部分匹配 - 只要给定的表达式匹配包名称的一部分,就会选择该包:

If no package matches the given expression and the expression
contains one of '.', '?' or '*' then it is assumed to be a POSIX
regular expression, and it is applied to all package names in the
database. Any matches are then installed (or removed). Note that
matching is done by substring so 'lo.*' matches 'how-lo' and
'lowest'. If this is undesired, anchor the regular expression with
a '^' or '$' character, or create a more specific regular
expression.
Run Code Online (Sandbox Code Playgroud)

.匹配每个字符 - 所以每个包名都会满足它。因此,apt-get将选择它知道的每个包。

现在,回到目标版本,如果多个存储库提供相同的包,它用于指定要针对此操作的存储库。请参阅如何仅从特定存储库安装更新?

python不是默认 Ubuntu 上的有效版本(而且不太可能是一个)。因此,即使apt-get选择了它知道的每个包,它也找不到匹配的版本,因此失败了。