我在我的 Linux Mint DE 上安装了不同的 python 版本。我使用该update-alternatives --set
语句可以轻松地在不同版本之间切换。
不幸的是,有时apt-get install
或upgrade
类似的东西在识别正确的 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