使用 python 的 update-alternatives 时 apt-get 无法检测到正确的 python 版本

使用 python 的 update-alternatives 时 apt-get 无法检测到正确的 python 版本

我在我的 Linux Mint DE 上安装了不同的 python 版本。我使用该update-alternatives --set语句可以轻松地在不同版本之间切换。

不幸的是,有时apt-get installupgrade类似的东西在识别正确的 python 路径时会出现问题。似乎想使用python2.7,尽管我已经设置了正确的替代方案。我想apt-get无法找出 that/usr/bin/python指向/etc/alternatives/python和 that 指向/usr/bin/python2.7

如果我直接手动创建符号链接从/usr/bin/python/usr/bin/python2.7 apt-get完成,不会出现错误。

如何使用替代选项才能apt-get正确检测和使用配置的 python 版本?

答案1

我认为这个问题可能与 shell (Bash) 在调用可执行文件时如何散列可执行文件的路径有关。

摘自bash 手册页

Bash 使用哈希表来记住可执行文件的完整路径名(请参阅下面的 SHELL BUILTIN COMMANDS 下的哈希)。仅当在哈希表中未找到该命令时,才会对 PATH 中的目录执行完整搜索。

hash您可以使用如下命令询问哈希值:

$ hash -l
builtin hash -p /usr/sbin/update-alternatives update-alternatives
builtin hash -p /usr/bin/man man
builtin hash -p /bin/ls ls

您可以使用开关使哈希“忘记”所有内容-r

$ hash -r
manny@manny:~$ hash -l
hash: hash table empty

我会尝试hash -r在运行之前运行 aapt-get以查看是否可以解决问题。

另外,我还会查看输出,update-alternatives --query <command>以确保它包含您认为应该包含的值。这是我的java例子:

$ update-alternatives --query java
Name: java
Link: /usr/bin/java
Slaves:
 java.1.gz /usr/share/man/man1/java.1.gz
Status: auto
Best: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
Value: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

Alternative: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
Priority: 1071
Slaves:
 java.1.gz /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz

相关内容