ubuntu sudo:Python:未找到命令

pu3pd22g  于 2022-12-22  发布在  Python
关注(0)|答案(5)|浏览(362)

我想让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?我不想要一个单一的会话修复,但每次我使用终端时都会工作。
谢啦,谢啦

pepwfjgg

pepwfjgg1#

您的/etc/sudoers被显式配置为使用已知的安全路径覆盖您的用户路径。
也就是说,如果你想让用户的PATH路径一直通过,你可以很容易地用一个函数覆盖sudo,这个函数可以做到这一点(安装在你的~/.bashrc或类似的东西中,使它持久化):

psudo() { sudo env PATH="$PATH" "$@"; }

此后,psudo python将使用PATH中的相同python解释器。
如果您 * 真的 * 想覆盖sudo命令本身,这也是可行的:

sudo() { command sudo env PATH="$PATH" "$@"; }

command内置函数防止函数递归(调用自身)。

snvhrwxg

snvhrwxg2#

如果你不想修改你的bashrc,你可以这样做:第一个月

hgncfbus

hgncfbus3#

...其他方法。

当我看到这个帖子时,我只是想跑步:
第一个月
当我运行上面的命令时,我收到一条消息,告诉我除了输入的内容之外,还要使用sudo,例如
sudo python -m spylon_kernel install
当我这么做的时候,我得到了"sudo:python:未找到命令 *'消息,并添加 --user,例如:
python -m spylon_kernel install --user
就足以完成它。
请注意,我没有在最后一个命令中使用sudo命令。

a1o7rhls

a1o7rhls4#

公认的答案是建议设置函数来复制或替换sudo,新的Linux用户可能会发现语法很复杂。
有一个更简单的方法...
用户具有miniconda 3 python环境:

(base) user@machine:~/$ which python
/home/user/miniconda3/bin/python
(base) user@machine:~/$ python --version
Python 3.9.12

sudo看不到python:

(base) user@machine:~/$ sudo which python
(base) user@machine:~/$ sudo python --version
sudo: python: command not found

只需使用“which python”代替“python”即可!

(base) user@machine:~/$ sudo `which python` --version
Python 3.9.12

这允许shell解释器将sudo命令中的“python”替换为“/home/user/miniconda 3/bin/python”。
或者,设置一个环境变量,比如PYalways use来代替python-这样做的好处是可以在shell脚本中使用:

(base) user@machine:~/$ export PY=`which python`
(base) user@machine:~/$ $PY --version
Python 3.9.12
(base) user@machine:~/$ sudo $PY --version
Python 3.9.12

注意:sudo--preserve-env=PATH是有吸引力的,但不起作用,因为sudo使用/etc/sudoers中的secure_path来查找可执行文件,* 而不是 * $PATH。

ccrfmcuu

ccrfmcuu5#

如果已经安装了python 3.x,请尝试以下代码

sudo python3

相关问题