我想让sudo python
找到Python 3。
我有一个奇怪的问题,在终端中,键入python --version
给出了3.6但sudo python --version
给出了2.7。在尝试了一些事情后,我终于用sudo apt-get purge python2*
卸载了2.7。这正确地删除了一切。不过,我无法让sudo python
找到Python 3。
我已尝试将/root/.bashrc
更改为:
export PATH="/home/username/anaconda3/bin:$PATH"
和
alias python="/home/username/anaconda3/bin/python"
我也在~/.bashrc
中添加了相同的行。
我的etc/sudoers
有这一行:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"/usr/bin:$
我打开了新的终端,甚至重新启动了计算机。任何想法如何使sudo python
只找到Python 3?我不希望单个会话修复,但每次使用终端时都会有效。
由于
答案 0 :(得分:2)
如果您不想修改bashrc,则始终可以执行以下操作:
sudo env "PATH=$PATH" python something
答案 1 :(得分:1)
您的/etc/sudoers
已明确配置为使用已知的安全路径覆盖您的用户路径。
也就是说,如果你想要始终通过用户的PATH路径,你可以轻松地使用一个能够执行此操作的函数覆盖sudo
(安装在~/.bashrc
或类似的代码中以使其持久化):
psudo() { sudo env PATH="$PATH" "$@"; }
此后,psudo python
将使用与PATH中相同的python
解释器。
如果确实想要覆盖sudo
命令本身,那也是可行的:
sudo() { command sudo env PATH="$PATH" "$@"; }
command
内置函数阻止函数递归(调用自身)。
答案 2 :(得分:1)
当我到达这篇文章时,我只是想跑步:
python -m spylon_kernel install
当我运行上面的命令时,我收到一条消息,告诉我除了键入的内容外,还要使用sudo
,例如
sudo python -m spylon_kernel install
当我这样做时,我从控制台收到了“ sudo:python:命令未找到”消息,并添加了-user ,例如:
python -m spylon_kernel install --user
足以完成它。
请注意,我在上一个命令中没有使用
sudo
命令。