在终端中运行Python脚本而不使用Python命令

49
我有一个Python脚本,我们称其为script1.py。我可以通过终端以以下方式运行它:
python /path/script1.py
...

但我希望它能像命令行程序一样运行:

arbitraryname
...

我该如何做到这一点?

4个回答

84

你在脚本开头使用一个shebang行

#!/usr/bin/env python

使文件可执行:

chmod +x arbitraryname
将其放在您的 PATH 目录中(可以是符号链接):
cd ~/bin/
ln -s ~/some/path/to/myscript/arbitraryname

cd ~/bin/ 是正确的吗?不应该是 cd ~bin/ 没有第一个斜杠吗? - Arcones
1
当然。~bin/是完全不同的东西,那是用户bin的主目录,而~/bin/是当前用户的主目录下的bin子目录。后者是一个常见的每个用户都要添加到PATH环境变量中的目录。 - Martijn Pieters
非常好而且详细的回答。然而,我不明白为什么我会有这个问题:➜ ~ cd ~bin ➜ ~bin pwd /bin ➜ ~bin whoami arcones我在两台不同的Linux机器上都遇到了相同的问题,你有什么想法吗? - Arcones
1
@Arcones:~username与当前用户无关,因此whoami输出是无关紧要的。大多数Linux系统都有一个名为bin的用户,其主目录设置为/bin,请参见Linux标准基准 - Martijn Pieters

50

有三个步骤:

  1. 在脚本顶部添加“shebang”,告诉如何执行您的脚本。
  2. 给脚本授予“运行”权限。
  3. 将脚本放入PATH中,以便您可以从任何位置运行它。

添加shebang

您需要在脚本顶部添加shebang,以使shell在解析您的脚本时知道使用哪个解释器。通常是这样的:

#!path/to/interpretter

要在您的计算机上找到Python解释器的路径,您可以运行以下命令:

which python

这将搜索您的PATH以查找Python可执行文件的位置。它应该返回一个绝对路径,然后您可以使用它来构建您的shebang。确保您的shebang位于Python脚本的顶部:

#!/usr/bin/python

运行权限

为了让您的shell知道在您尝试将脚本用作命令时您要实际执行它,您需要标记您的脚本具有运行权限。要做到这一点,您可以运行以下命令:

chmod +x myscript.py

将脚本添加到你的路径中

PATH环境变量是一个有序的目录列表,当你尝试运行命令时,你的shell将在这些目录中查找。因此,如果你想让Python脚本成为一个可以从任何地方运行的命令,那么它需要在你的PATH中。你可以使用以下命令查看你的path内容:

echo $PATH

这将打印出一长串文本,每个目录之间由分号分隔。当你想知道从PATH运行的可执行文件的实际位置时,可以通过运行以下命令找到它:

这将打印出一长串文本,每个目录之间由分号分隔。当你想知道从PATH运行的可执行文件的实际位置时,可以通过运行以下命令找到它:

which <commandname>

现在你有两个选择:将你的脚本添加到已经在PATH中的目录中或者添加一个新目录到PATH中。我通常会在我的用户主目录中创建一个目录,然后将它添加到PATH中。要将东西添加到你的路径中,你可以运行以下命令:

export PATH=/my/directory/with/pythonscript:$PATH

现在,您应该能够在任何地方运行Python脚本作为命令。但是!如果您关闭终端窗口并打开一个新窗口,新窗口将不会记住您刚刚对PATH所做的更改。因此,如果您希望保存此更改,则需要将该命令添加到您的.bashrc或.bash_profile文件的底部。


12

将以下行添加到script1.py的开头:

#!/usr/bin/env python

然后使脚本可执行:

$ chmod +x script1.py

如果脚本位于出现在您的 PATH 变量中的目录中,您可以直接键入
$ script1.py

否则,您需要提供完整的路径(可以是绝对路径或相对路径)。这包括当前工作目录,它不应该出现在您的PATH中。
$ ./script1.py

1
我想无论在哪里运行它而不需要完整路径。我该如何将其添加到 PATH 变量中? - Alpagut
在你的.bash_profile文件中(我假设你使用的是bash),添加以下行:PATH+=":/path/where/script1.py/lives",当然要添加正确的目录。 - chepner

2
你需要使用一个哈希bang。将其添加到你的 Python 脚本的第一行。
#! <full path of python interpreter>

然后更改文件权限,并添加执行权限。
chmod +x <filename>

最后,使用以下命令来执行它:
./<filename>

如果它在当前目录中,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接