制作Python程序可执行时的问题

4 投票
3 回答
4284 浏览
提问于 2025-04-15 21:24

我正在尝试制作一个程序,这样我就可以通过命令行以以下格式运行它:

./myProgram

我已经把它设置成可执行文件,并在开头加上了 #!/usr/bin/env python,但是它给了我以下错误。

env: python\r: No such file or directory

不过,当我运行 "python myProgram" 时,它运行得很好。有人能告诉我我哪里做错了吗?

3 个回答

3

你可以使用命令 dos2unix filename.py 来转换文件格式,或者在 vim 编辑器里输入命令 :set fileformat=unix 然后保存文件。

11

我也赞同ignacio的建议。

不过,为了更直接地回答你问题的第一部分,每种操作系统使用的换行符是不一样的:

POSIX(像Linux、*BSD、Mac OS X等Unix类系统)使用的是\n(换行符),而DOS/Windows则使用组合\r\n(回车符加换行符),旧版的Mac OS 8或9只使用回车符\r

要解决这个问题,你可以运行一个像ignacio建议的工具,或者你也可以通过你的文本编辑器来处理(不过可能不太明显)。

至于你问题的另一部分,$ python myProgram之所以能工作,是因为Python把这三种不同的换行符都当作一样的处理……脚本顶部的shebang行会被忽略,因为你告诉Python去加载和运行这个脚本,而"#"表示第一行是注释,所以也会被忽略。

当你让操作系统的命令行去运行它时,它需要解析那一行并执行你请求的解释器,但如果它无法做到这一点,就会出错,就像你遇到的那样。

希望这能帮到你!

顺便提一下,你可以查一下你的操作系统使用的换行符是什么,只需查看os.linesep(数据)属性。例如,在我的Mac(OS X)上,我得到的是:

>>> import os
>>> os.linesep
'\n'

这里有个快速总结,关于我从我的硬核Python入门课程笔记中抄来的其他相关属性:

alt text

17

你的文件换行符不对。可以用 dos2unix 这个工具来修复它们。

撰写回答