有没有一种便携的方法可以在shell中运行Python脚本而不必写出其完整路径?
例如,在Linux中,我想在我的主目录下执行以下命令:
cd ~
我希望能够运行位于~/long/path/to/run.py的Python脚本,但我希望只需输入
run.py
即可运行。
python run.py
取代
python ~/long/path/to/run.py
我希望有一种类似于PATH变量的搜索路径列表,其中包含多个目录,这样 python run.py 就会在其中一个目录中运行它遇到的第一个run.py。我考虑将run.py转换为可执行文件,并将其所在目录添加到系统PATH变量中,但找不到使Python脚本可执行的便携式方法。
编辑:
一年后,我更加了解问题,并且意识到我的问题并不是很清楚,也没有太多意义,所以在得到问题点赞后,我将澄清一些事情。
1)便携式。
当我提出这个问题时,我说过便携式。然而,在这种情况下,便携式意味着什么并不清楚,并且我没有给予它太多重视。
- 平台:应在POSIX(Linux、MacOS等)和Windows上工作 - 即使如此,这仍然不太合理,因为Windows使用cmd.exe,而POSIX使用sh,因此每个平台可能会用不同的语法运行命令。因此,假设最具可移植性的是将相同的输入提供给sh和cmd.exe,两者都运行Python脚本。在这种情况下,您可以从ANSI C system函数运行相同的命令,该函数在POSIX上使用sh,在Windows上使用cmd。ANSI C是Windows和POSIX的少数共同之处之一,因此这个问题在这种情况下有些意义。
2)可执行文件
接下来,短语“将run.py转换为可执行文件”不是很清楚。我的意思是指Linux策略chmod + x run.py、添加一个shebang #!/usr/bin/env python,并将其所在目录添加到系统PATH环境变量中。但是,这在Windows上不起作用,因为Windows不支持类似于Linux的可执行文件元数据属性,并且因为/usr/bin/env在Windows上不一定存在。
3)扩展名
最后,我希望有一种解决方案,不指定run是什么类型的文件,因此,如果将来我们决定将其变成Perl文件,接口就不会更改。
因此,写run.py是不好的,因为它将指定文件类型;最好能够只写run。