Python脚本给出`:没有这样的文件或目录`

Posted

技术标签:

【中文标题】Python脚本给出`:没有这样的文件或目录`【英文标题】:Python script gives `: No such file or directory` 【发布时间】:2013-11-14 21:27:09 【问题描述】:

我有几个运行良好的 python 脚本,但是如果我尝试从 bash 运行它,一个脚本(截至今天早上)开始给我这个错误:

: 没有这样的文件或目录

我可以通过执行python script_name.py 来运行“损坏”脚本,在环顾四周后,我得出的总体想法是,我的 hashbang 行结尾可能已更改(默默地),所以我查看了通过 VI 中的 :set list 选项,工作脚本和损坏脚本的行结束,如本问题所示 -> View line-endings in a text file

两个文件似乎都使用相同的字符($)结束,所以我不知道如何从这里开始。具体来说,如果set list 不是正确的方法,如何实际“看到”结尾的行。

PS:脚本是可执行的,并且 shebang 在那里,我说这只是这 1 个脚本在周末之前工作正常,但从今天早上开始给我这个错误。

-- 编辑:--

通过dos2unix 运行脚本确实让它再次工作,但我想知道有什么方法可以可视化在 VI(M) 中以某种方式结尾的行,或者为什么 Geany 首先以某种方式转换了行结尾(因为我无论如何都不要在dos/windows系统上工作)。

【问题讨论】:

你是如何运行它的?你没有忘记shebang吗? 运行 'file script_name.py' 如果它是 ASCII 文本可执行文件,使用 CRLF 行终止符,您必须使用 dos2unix 命令转换文件 我有一个简单的打印语句作为代码的第一行,然后立即退出。代码本身不是问题,我只是说我可以通过python scriptname.py 调用它来运行它,但不能通过./scriptname.py 调用它,它是可执行的。 @InbarRose sudo chmod 0777 filename永远的答案。 要查看行尾样式,请使用vim命令:set fileformat或简称:set ff。它将显示dosunix。您可以使用:w ++ff=unix:set ff=unix 转换文件,然后正常保存。 【参考方案1】:

从上面的 cmets 看来,您有 dos 行结尾,因此没有正确处理 hashbang 行。

在 Vim 中:set list 不显示行结束样式,因为该选项仅在读取/写入文件时使用。在内存中,行尾始终是行尾。用于文件的行结束样式保存在 Vim 的每个文件选项中,奇怪地称为 fileformat

要在 Vim 中查看/更改行尾样式,可以使用以下命令:

:set fileformat
:set ff

它将显示dosunix。你当然想要unix ;-)。

要快速更改它,您可以使用以下命令保存文件:

:w ++ff=unix

或者,如果您愿意:

:set ff=unix

然后正常保存文件。

所以看到所有血淋淋的细节只需 :help fileformat:help file-formats:help fileformats

【讨论】:

帮了我很多!谢谢。【参考方案2】:

也可以使用dos2unix命令转换文件格式

dos2unix

这有助于我运行 python 脚本

这通常发生在我们在 windows 中打开文件并进行更改并保存时。 如果您打开文件,请在每行末尾找到 ^M 个字符

谢谢

【讨论】:

这绝不是问题的答案。您的回答甚至已经在问题中被我自己特别提到了。【参考方案3】:

就个人而言,我发现使用 python 解释器的直接路径有点错误。由于你不使用windows平台,你应该有程序env,通常在/usr/bin(/usr/bin/env)。尝试使用以下 shebang:

#!/usr/bin/env python

不同的发行版将 python 二进制文件存储在 /bin 或 /usr/bin (或一些奇怪的位置),而这个使你的脚本独立于配置(尽可能,这里我们有可能将 env 存储在其他地方;仍然 - env 不在 /usr/bin 中的可能性比 python 定位错误的可能性要小)。

我有类似的问题(如果不完全相同的话)并且对我有用。

另外,我安装了两个 python 解释器(2.7.x 和 3.x),所以我需要为 env 使用“python3”参数。 AFAIR 通常将不同的名称链接到不同的二进制文件,因此“env python”将在我的系统上运行 python2.7,“env python3”(也是 python33,或类似的东西)将运行 p3k,“env python2”(也是 python27,等)将运行 python 2.7.x。声明应该使用哪个版本的解释器似乎也是一个好主意。

【讨论】:

被否决:行尾是 OP 问题的原因,而不是这个。这是毫无根据的社论。 我实际上同意 - 事后我知道这不是足够的答案,尽管我不想删除它或编辑只是为了重复别人的答案。我不会把它称为错误的猜测,尽管这不是重点。【参考方案4】:

我在 Windows 上编辑我的代码,使用 git 将其签入,然后在 Linux 上签出并运行它时遇到了这个问题。

我的解决方案是:告诉 git 做正确的事。我在 Windows 机器上发出了这个命令:

git config --global core.autocrlf true

修改文件并签入;瞧,再也没有这样的问题了。

正如在Git documentation 上讨论的那样。

【讨论】:

以上是关于Python脚本给出`:没有这样的文件或目录`的主要内容,如果未能解决你的问题,请参考以下文章

Django Heroku:python:无法打开文件'manage.py':[Errno 2]没有这样的文件或目录

无法打开文件“django-admin.py”:没有这样的文件或目录——Mac OSX

PyInstaller + UI 文件 - FileNotFoundError: [Errno 2] 没有这样的文件或目录:

PyInstaller + UI 文件 - FileNotFoundError: [Errno 2] 没有这样的文件或目录:

Ubuntu 无法执行没有这样的文件或目录

env: python\r: 没有这样的文件或目录