簡體   English   中英

sudo:python:找不到命令

[英]sudo: python: command not found

我想讓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? 我不想要單個會話修復,而是每次使用終端時都會起作用的東西。

謝謝

您的/etc/sudoers被明確配置為使用已知的安全路徑覆蓋您的用戶路徑。

也就是說,如果您想始終通過用戶的 PATH 路徑,您可以輕松地使用將執行此操作的函數覆蓋sudo (安裝在您的~/.bashrc或類似文件中以使其持久化):

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

此后, psudo python將使用在 PATH 中找到的相同python解釋器。


如果您真的想覆蓋sudo命令本身,那也是可行的:

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

內置command可防止函數遞歸(調用自身)。

如果你不想修改你的 bashrc,你總是可以這樣做: sudo env "PATH=$PATH" python something

...其他方法。

當我看到這篇文章時,我只是想跑:

python -m spylon_kernel install

當我運行上面的命令時,我收到一條消息,告訴我除了輸入的內容之外還要使用sudo ,例如

sudo python -m spylon_kernel install

當我這樣做時,我從控制台收到了“ sudo: python: command not found ”消息,並添加了--user例如:

python -m spylon_kernel install --user

足以完成它。

請注意,我沒有在最后一個命令中使用sudo命令。

如果已經安裝了 python 3.x,請嘗試以下代碼

sudo python3 

接受的答案建議設置函數來復制或替換sudo ,新的 Linux 用戶可能會覺得語法很復雜。

有一個更簡單的方法......

用戶有 miniconda3 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命令中用“/home/user/miniconda3/bin/python”替換“python”。

或者,設置一個環境變量,比如PY始終代替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

注意:帶有--preserve-env=PATHsudo很有吸引力,但不起作用,因為sudo使用/etc/sudoers中的secure_path來查找可執行文件,而不是$PATH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM