是否有一种可移植的方式从 shell 运行 python 脚本而不编写其完整路径?
例如在 Linux 中,我想在我的主目录中
cd ~
能够运行名为 run.py 的 python 脚本,即 ~/long/path/to/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 Csystem
函数运行相同的命令,该函数sh
在 POSIX 和cmd
Windows 上使用。ANSI C 是 Windows 和 POSIX 通用的少数东西之一,在这种情况下这个问题是有道理的。
2) 可执行
接下来,短语turning run.py into an executable
, 不是很清楚。通过我说的Linux策略chmod +x run.py
,添加一个shebang #!/usr/bin/env python
,并在系统中添加它的目录添加~/long/path/to/PATH环境变量。但这不适用于 Windows,因为 Windows 不支持像 Linux 这样的可执行文件元数据属性,而且 /usr/bin/env 不一定存在于 Windows 中。
3) 扩展
最后,在我的脑海中,我希望有一个解决方案,它不指定运行什么样的文件,这样如果有一天我们决定制作它,比如说,一个 perl 文件,任何接口都不会改变。
因此,写入run.py
会很糟糕,因为它会指定文件类型;能写会更好run