当我从命令行运行 Python 脚本时
./file.py
与我运行它时相比,它的解释不同(因一堆错误而失败):
python file.py
为什么它们的执行方式不同?
最佳答案
在类 Unix 系统上:
./file.py
要求file.py
是可执行的(例如,chmod a+x file.py
)。<./file.py
使用在其 shebang 行中指定的任何解释器运行脚本;python file.py
使用$PATH
中名为python
的解释器运行它。如果您有多个版本的 Python,这会产生很大的不同。
如果您不知道 $PATH
中哪个 python
最高,请输入 which python
,它会告诉您。
如果您希望 shebang 行运行 $PATH
上最高的 python
,请将其写为:
#!/usr/bin/env python
在 Windows 上:
./file.py
使用任何已注册处理*.py
文件的应用程序运行脚本,而python file.py
运行它与名为python.exe
的解释器在您的%PATH%
上最高。同样,如果您有多个版本的 Python,这会产生很大的不同。
请注意,与 Unix shell 不同,Windows cmd.exe
不关心 shebang,只关心扩展。但是,如果您安装了足够新的 Python 版本,则注册为处理 *.py
文件的应用程序将为 PEP 397。 Python 启动器,确实查看 shebang。 (您还可以获得旧版本 Python 的启动器 separately。)
根据您的评论,第一行是:
just a start of the program, i.e. import socket
听起来您根本没有 shebang 行。这意味着,如果你在类 Unix 系统上,./file.py
将使用默认解释器运行它——在 Unix 上是 /bin/sh
和大多数 Unix-likes,它根本不是 Python 解释器。因此,您可能会遇到一堆令人困惑的错误,可能以类似 import: command not found
的内容开头。
关于python - 运行 ./file.py 和 python file.py 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255985/