运行 ./file.py 和 python file.py 有什么区别?
当我从命令行运行Python脚本时
./file.py
它的解释方式和我用下面的方式运行时(会出现一堆错误)是不同的:
python file.py
为什么它们的执行方式不一样呢?
1 个回答
12
在类Unix系统上:
./file.py
需要file.py
文件具有可执行权限(比如用chmod a+x file.py
命令来设置)。./file.py
会用文件开头的“shebang”行指定的解释器来运行这个脚本;而python file.py
则会用你系统中$PATH
环境变量里优先找到的名为python
的解释器来运行。如果你安装了多个版本的Python,这个差别可能会很大。
如果你不确定哪个 python
是在你的 $PATH
中优先的,可以输入 which python
来查看。
如果你希望shebang行使用在 $PATH
中优先的 python
,可以这样写:
#!/usr/bin/env python
在Windows上:
./file.py
会用注册来处理*.py
文件的应用程序来运行这个脚本,而python file.py
则会用在你的%PATH%
中优先找到的名为python.exe
的解释器来运行。同样,如果你有多个版本的Python,这个差别也可能很大。
需要注意的是,Windows的 cmd.exe
和类Unix的命令行不同,它不关注shebang,只关注文件扩展名。不过,如果你安装了足够新的Python版本,处理 *.py
文件的应用程序会是 PEP 397 Python启动器,它会查看shebang。(你也可以为旧版本的Python单独获取这个启动器,这里有链接。)
根据你的评论,第一行是:
只是程序的开始,比如导入socket模块
听起来你根本没有shebang行。这意味着,如果你在类Unix系统上,./file.py
会用默认的解释器来运行这个脚本——在Unix和大多数类Unix系统上,默认解释器是 /bin/sh
,这根本不是Python解释器。所以你可能会看到一堆让人困惑的错误,可能会以 import: command not found
开头。