如何在不指定完整路径的情况下可移植地运行Python脚本

Cir*_*四事件 10 python windows shell posix

是否有一种可移植的方式从shell运行python脚本而不编写完整路径?

例如在Linux中,我想在我的主目录中

cd ~
Run Code Online (Sandbox Code Playgroud)

能够运行一个名为run.py的python脚本,比如〜/ long/path/to/run.py,但是我想通过简单的输入来运行它

python run.py
Run Code Online (Sandbox Code Playgroud)

代替

python ~/long/path/to/run.py
Run Code Online (Sandbox Code Playgroud)

我希望某种搜索路径列表包含几个目录,就像PATH变量一样,这样python run.py就会运行它在其中一个目录中遇到的第一个run.py.

我已经考虑将run.py转换为可执行文件并将其目录添加到系统PATH变量中,但是找不到使python脚本可执行的可移植方法.

编辑

一年后,在询问之后,我的菜鸟少了一点,我看到我的问题不是很清楚,也没有多大意义,所以在提出问题之后我会澄清一些事情.

1)便携式.

当我问这个我说便携.然而,在这种情况下,便携式手段并不清楚,我并没有过多强调它.

  • 平台:应该在POSIX(Linux,MacOS等)和Windows上运行

  • 这仍然没有太大意义,因为Windows使用cmd.exe和POSIX使用sh,所以每个人都可以使用不同的语法运行命令.因此,让我们说可能最便携的东西是将相同的输入提供给两者,shcmd.exe在两种情况下运行python脚本.在这种情况下,您可以从ANSI C system函数运行相同的命令,该函数sh在POSIX和cmdWindows上使用.ANSI C是Windows和POSIX中常见的几件事之一,在这种情况下,这个问题是有道理的.

2)可执行

接下来,这句话turning run.py into an executable,不是很清楚.我正在谈论Linux的策略chmod +x run.py,添加一个shebang #!/usr/bin/env python,并添加其目录系统添加〜/ long/path /到/ PATH环境变量.但是这对Windows不起作用,因为Windows不支持像Linux这样的可执行文件元数据属性,因为/ usr/bin/env不一定存在于Windows中.

3)扩展

最后,在我的脑海里,我希望找到一个解决方案,它没有指定运行什么类型的文件,所以如果有一天我们决定制作它,比如一个perl文件,那么接口就不会改变.

因此,写入run.py会很糟糕,因为它会指定文件类型; 能够写得更好会更好run

And*_*ark 16

如果包含的目录run.py位于模块搜索路径(例如,PYTHONPATH环境变量)上,您应该能够像这样运行它:

python -m run
Run Code Online (Sandbox Code Playgroud)

以下是-m命令行选项的文档:

-m module-name
搜索sys.path指定的模块并将相应的.py文件作为脚本运行.


A B*_*A B 5

您可以通过添加使python脚本可执行

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

到文件的开头,并使其可执行chmod +x.