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
。它将显示dos
或unix
。您可以使用:w ++ff=unix
或:set ff=unix
转换文件,然后正常保存。
【参考方案1】:
从上面的 cmets 看来,您有 dos 行结尾,因此没有正确处理 hashbang 行。
在 Vim 中:set list
不显示行结束样式,因为该选项仅在读取/写入文件时使用。在内存中,行尾始终是行尾。用于文件的行结束样式保存在 Vim 的每个文件选项中,奇怪地称为 fileformat
。
要在 Vim 中查看/更改行尾样式,可以使用以下命令:
:set fileformat
:set ff
它将显示dos
或unix
。你当然想要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] 没有这样的文件或目录: