Ubuntu /usr/bin/env: python: 没有那个文件或目录。

180

我更新了内核后,Ubuntu不能正常工作,PS: 我尝试执行“meld”命令,它会报告“/usr/bin/env: python: No such file or directory”,然后我执行“sudo apt-get install python”,结果得到“python is already the newest version.”,我该怎么办。


我不擅长Linux,你能告诉我如何将我的Linux恢复到上一个正确的状态,或者正常重新安装Python吗。


1
你想做什么?从 /usr/bin/env 访问 Python? - gary
看起来你在那个点上设置的环境路径不正确。针对Ubuntu相关问题,请使用ubuntu.stackexchange.com! - Alex Martelli
或者点击这里http://ubuntuforums.org/ - gary
可能是重复的问题,参考链接:https://dev59.com/31sX5IYBdhLWcg3wNdHj - tripleee
11个回答

331

问题场景:

/usr/bin/env: ‘python’: No such file or directory

可能的解决方案 #1

  • 如果没有安装Python 3,请安装:apt-get install python3

可能的解决方案 #2

  • 如果已经安装了Python 3,请运行以下命令:whereis python3

  • 然后我们创建一个符号链接: sudo ln -s /usr/bin/python3 /usr/bin/python

编辑:大家好,我注意到@mchid在我的答案下面发布了更好的解决方案sudo apt install python-is-python3


1
对我来说,在Ubuntu 20.04上也起作用,只是我将符号链接放到了我的/home/user/bin文件夹中,因为我不想弄乱/usr/bin - Richard Chambers
这显然解决了这个问题,但我有点震惊这是这个问题的“正确”解决方法。为什么不使用系统路径上的常规python3?这是脚本/应用程序开发者的错吗?一个已经过时的Python 2标准已经不再使用了吗?还有其他原因导致它不能“正常工作”吗? - Manius
10
我使用了以下的解决方案,如果它被放在官方的 apt 仓库中发行的话,会更加安全:sudo apt install python-is-python3 - The Fool
1
@TheFool,我已经为下面列出的解决方案点赞了。很好的发现,比我的笨办法要好得多。 - Francesco Mantovani
1
@FrancescoMantovani 谢谢,作为一个新手使用Linux,我花了一些时间才意识到它只是一个符号链接(Windows中的近亲),我可以随时删除它。所以,它并没有给我带来任何问题,但我只是想撤销它。 - Sнаđошƒаӽ
显示剩余6条评论

182

在Ubuntu 20.04及更新版本中,有一个软件包可以解决这个问题。运行以下命令:

sudo apt update
sudo apt install python-is-python3

运行apt-cache show python-is-python3以获取更多信息。


1
我还没有测试过这个,但是假设它能够工作,似乎这是“正确”的或者最佳的答案(SO 投票计数再次失败),问题可能是由于从 Python2 到 3 的标准变化导致的。这是否准确? - Manius
1
@Manius 他们在五月份回答了我,而我直到快到十二月才回复。我的意思是,这个做法基本上是一样的(创建符号链接),所以“最好”的说法有点主观。但是,是的,这似乎是从python2转换到python3的结果 - 实际上有一个名为python-is-python2的软件包,为需要运行旧版python软件的人创建了一个指向python2的符号链接。 - mchid
1
如上所述,您可以运行apt-cache show python-is-python3来获取非常详细的描述。我认为所提供的描述已经非常直接和简洁,完全传达了该软件包的功能和作用。简而言之:它是一个方便的软件包,提供了一个符号链接,将/usr/bin/python解释器指向当前默认的python3版本。 - undefined
1
如果您的系统不是基于Debian/Ubuntu,并且您想要复制此软件包的功能,请参考此答案手动创建一个指向python3的符号链接。 - undefined
1
@EugenKonkov 或者,您可以编辑您的Python脚本第一行的shebang,直接指向python3。因此,您可以编辑Python脚本,使用#!/usr/bin/python3#!/usr/bin/env python3。但是,您需要为每个有问题的脚本都这样做,每次遇到这个错误时。 - undefined
显示剩余2条评论

72

我也曾被这个错误卡住过,所以我想分享一下我是怎么解决的。

我的问题是一个错误:

: No such file or directory

这对我来说没有太多意义。我的问题是,我的编辑器已经将脚本从Unix LF转换为Windows CR / LF行终止符,但并没有提醒我。这样做的一个相当不幸的结果是 "#!/usr/bin/env python" 实际上变成了 "#!/usr/bin/env python\015",其中 \015 是不可见的CR字符... 然后/usr/bin/env无法找到命令“python\015”,因此导致了文件未找到错误。

将脚本转换为Unix行尾约定解决了我的问题... 但只有经过几分钟的思考之后。


6
非常感谢您。顺便提一下,您可以通过使用命令 fromdos <文件路径> 将Windows换行符转换为Unix换行符。 fromdos 实用程序在标准软件源中的 tofrodos 包中。 - destan
Ubuntu应该聪明到能够理解两种风格。这是哪一年了? - endolith
你可以在Vim编辑器中使用以下命令来转换文件格式::set ff=unix。更多细节请参考此答案:https://dev59.com/U3VD5IYBdhLWcg3wHnwX#82743。 - Tilak M Divakar
2
@endolith,它仍然不是(好吧,我正在Debian上检查,但我认为Ubuntu是一样的,shebang由Linux内核解析)。但现在错误消息要好得多:/usr/bin/env: ‘python3\r’: No such file or directory - Ruslan

30

2022年5月:如果你刚刚更新了Monterey 12.3,发现更新将python替换成了python3。下载python可以解决在Xcodegit命令行中遇到的问题。一定要阅读下面的两条评论。


3
对于那些不知道的人:Python 2已经停止支持,甚至在这个阶段都没有接收到安全更新。升级到Python 3真的非常重要! - Sebastian
8
我用Homebrew安装Python时遇到了类似的错误,受到其他回答的启发,我运行了 "sudo ln -s /opt/homebrew/bin/python3 /opt/homebrew/bin/python",结果问题神奇地解决了。谢谢。 - Sandra

20

如果使用MacOS并且已经通过Homebrew安装了Python3,那么面对同样的问题:

sudo ln -s /opt/homebrew/bin/python3 /opt/homebrew/bin/python

文件已存在。 - Azhar Uddin Sheikh
当我运行which python3时,返回的结果是/usr/bin/python3。所以这个方法不起作用。我的解决方案来自于这篇帖子,这是由于苹果将默认的python更改为不包含v2.7所导致的。 - Shadoath

13

对于使用macOS或M1机器的用户(已在12.5上测试),将/usr/bin/python3进行符号链接将无法工作,因为它是指向Xcode python3安装的引用。相反,请执行以下操作:

sudo ln -s /Library/Developer/CommandLineTools/usr/bin/python3 /usr/local/bin/python


10
@mchid的答案是你应该选择的答案。
只是提醒一下,
如果你这样做: $ python
它会显示“命令'python'未找到...”
但是如果你这样做: $ python3,它应该可以工作。
所以,只需修改shebang行
从#!/usr/bin/env python 到#!/usr/bin/env python3,你就可以开始了。
(通过执行sudo apt install python-is-python3自动完成)

2
这是一个更好的选择,假设你可以轻松修改脚本。 - zymhan

4

这篇文章是关于Android构建系统错误的解决方案 针对Python 3

如果你遇到了"/usr/bin/env 'python' no such file or directory"的错误信息,请采用以下解决方案之一: 如果你安装的是新版Ubuntu 20.04.2 LTS(而非升级版本):

sudo ln -s /usr/bin/python3 /usr/bin/python

如果您使用Git版本2.19或更高版本,则在执行repo init时可以指定--partial-clone。这将利用Git的部分克隆功能,仅在需要时下载Git对象,而不是下载所有内容。因为使用部分克隆意味着许多操作必须与服务器通信,所以如果您是开发人员并且使用具有低延迟网络的情况,请使用以下方法:
repo init -u https://android.googlesource.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M

您可以在下载源代码中查看文档。


1
出现错误“操作不允许”,我需要先创建名为“python”的目录吗? - Azhar Uddin Sheikh

4
创建一个符号链接解决了我的问题。
sudo ln -s /usr/bin/python3 /usr/bin/python

3

如果其他建议无法解决问题,另一个可能的解决方案是将.py脚本转换为UNIX格式。

在转换脚本之前,您可以通过安装dos2unix来实现。您可以使用以下命令完成:

sudo apt install dos2unix

安装完成后,您可以相应地转换您的脚本:
dos2unix <filename>.py

你可以在这里了解更多关于 dos2unix 的信息。

--

另外,尝试在本地运行脚本并查看是否正常工作,同时需要注意在脚本中包含hashbang

#!/usr/bin/env python3
  • 请注意,上述内容适用于 python3,如有需要,请使用python

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接