【问题标题】:bad interpreter no such file or directory /usr/bin/python错误的解释器没有这样的文件或目录 /usr/bin/python
【发布时间】:2018-05-29 02:07:48
【问题描述】:

我创建了脚本 python 并将其移至 /usr/bin 并使用 sdfgdgh 命名脚本,不带 .py 并在脚本中编写此代码

#! /usr/bin/python

print("worked")

我得到了脚本 chmod +x
但是当我输入终端 sdfgdgh 时给我错误:

错误的解释器没有这样的文件或目录 /usr/bin/python

为什么以及解决方案是什么?

【问题讨论】:

  • which pythonls /usr/bin/python 的输出是什么?
  • 你确定你的系统上安装了python吗?如果是这样,您将它安装在哪里?
  • 似乎操作系统无法识别 Python 的位置。您尚未将 python 添加到 .bashrc 文件中的 PATH 中。
  • @karthikbharadwaj 不需要在 .bashrc 中添加任何内容,因为这里将 python 解释器定义为 /usr/bin/python
  • @karthikbharadwaj:这不是真的。在这种情况下,将 python 添加到 PATH 将无济于事,因为在他的脚本中明确调用 /usr/bin/python 因此,如果 python 位于任何其他地方,它将无法工作,

标签: python


【解决方案1】:

问题在于您的 python 安装。可能您的/usr/bin/python 要么根本不存在,要么是指向不存在的python 的死符号链接。

所以第一个解决方案是检查/usr/bin/python 是否存在。如果是,请检查它是否不是死链接,如果是,请修复链接以指向现有的 python 解释器:

cd /usr/bin
sudo ln -fs <full_path_to_existing_python_binary> python

如果您不能或不想更改 /usr/bin/python 但您安装了 python 并且系统可以识别它的位置(即从 shell 调用 python),您可以尝试更改脚本作为解决方法:

#! /usr/bin/env python
print("worked")

这样,您的脚本将使用 python 作为解释器,而不管真正的 python 位置如何,只要它在您的 PATH 中。

【讨论】:

  • 我找到了解决方案,现在我将脚本复制到 /bin,如果在解释器的类似路径中,现在工作可能无法正常工作,谢谢大家的帮助
  • sudo ln -fs /s/miniconda2/bin/python python 它工作了
【解决方案2】:

我有类似的问题,我在我的 Ubuntu 20.04 中安装了一个依赖于 Python 2 的包。这弄乱了 python 的含义。我不得不卸载那个包:qjoypadxboxdrv 和另一个;使用sudo apt remove python卸载python 2。

然后确认,我使用了which python,它给出了一个空白输出。下一步是cd /usr/bin,然后使用sudo ln -fs python3 python 创建一个符号链接。

【讨论】:

    【解决方案3】:

    你可以安装python:

    apt install python
    

    之后,python 命令将起作用。

    【讨论】:

      【解决方案4】:
      1. 首先检查你安装的是哪个python
      $ which python
      /usr/bin/python
      
      1. 然后检查它是否可执行
      python -V
      Python 2.7.5
      
      1. 如果你在 linux 上运行一个 dos 格式的 py 文件,你也会遇到这个问题。 方法一: 用cat -v filepath检查dos文件格式,看看行是否以^M结尾。 方法二: vim filepath -> :set ff 进行检查,例如 "eni.py" [dos] 64L, 2151C 方法c: file filepath 检查是否有 CRLF file_path:Python 脚本,UTF-8 Unicode 文本可执行文件,带有 CRLF 行终止符

      解决方案: 您可以使用vim filepath 然后:set ff unix 将filefort 设置为unix

      【讨论】:

      • 有一个不错的实用程序,dos2unix,您可以安装它,将文件从 dos 转换为 unix 格式。
      【解决方案5】:

      我遇到了同样的问题。也许您正在将 Windows 上的脚本作为文件编辑并在 Linux 上执行。以下步骤为我解决了问题:

      1. 在终端上编辑-> sudo vi myscript.py
      2. 添加python位置-> #!/location/anaconda/bin/python

      从 ^M 可以看到文件 myscript.py 使用的是 windows/dos 样式的换行符而不是 Linux 样式

      【讨论】:

        【解决方案6】:

        一个灵活的解决方案是使用任意 python 版本的地址指向这个地址。

        假设你使用的是 Ubuntu,你可以找到安装的 Python 版本

        ls /usr/bin | grep python
        

        对我来说这是打印出来的:

        dh_python2
        python
        python2
        python2.7
        python3
        python3.8
        python3.8-config
        python3-config
        python3-futurize
        python3-pasteurize
        x86_64-linux-gnu-python3.8-config
        x86_64-linux-gnu-python3-config#
        

        现在假设您要指向 python 3.8。以下代码行将 python3.8 显示为第一个替代方案(因此最后是 1)。

        sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
        

        现在,每当引用 python,而不是 /usr/bin/python 文件夹时,都将访问 /usr/bin/python3.8

        您也可以争取其他替代方案。要查看您有哪些替代方案,请使用

        update-alternatives --list python
        

        最后要在这些选项之间切换,使用

        sudo update-alternatives --config python
        

        【讨论】:

          【解决方案7】:

          只需运行这个:-

          sudo bash -c "test -e /usr/bin/python || (apt -qqy update && apt install -qy python-minimal)
          

          【讨论】:

          • 欢迎提供直接解决方案,但请确保在其周围添加上下文,以便您的其他用户了解它是如何解决问题的
          • 这给了我 /usr/lib/cnf-update-db: not found
          猜你喜欢
          • 1970-01-01
          • 2014-10-24
          • 1970-01-01
          • 1970-01-01
          • 2020-12-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-25
          • 2021-04-01
          相关资源
          最近更新 更多