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

2024-05-12 20:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种可移植的方法可以从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转换为可执行文件,并将其目录添加到系统路径变量中,但找不到使python脚本可执行的可移植方法。

编辑

一年后,我问了这个问题之后,我就没那么傻了,我发现我的问题不是很清楚,也没有什么意义,所以在一个问题的投票后,我会澄清一些事情。

1)便携式。

当我问这个的时候,我说是便携式的。不过,在这种情况下,便携式的含义并不清楚,我也没有太多强调。

  • 平台:应在POSIX(Linux、MacOS等)和Windows上工作

  • 这仍然没有多大意义,因为windows使用cmd.exe,POSIX使用sh,所以每个人都可以用不同的语法运行命令。因此,假设最可移植的事情是将相同的输入同时提供给shcmd.exe,在这两种情况下都运行python脚本。在这种情况下,可以从ANSI Csystem函数运行相同的命令,该函数在POSIX上使用sh,在Windows上使用cmd。ANSI C是Windows和POSIX中为数不多的几个共同点之一,这个问题在这种情况下有一定的意义。

2)可执行

接下来,短语turning run.py into an executable不是很清楚。因此,我讨论的是Linux的策略chmod +x run.py,添加一个shebang#!/usr/bin/env python,并添加其目录system add~/long/path/to/path环境变量。但这对windows不起作用,因为windows不支持Linux这样的可执行文件元数据属性,而且/usr/bin/env不一定存在于windows中。

3)延伸

最后,在我的脑海中,我希望有一个解决方案,不指定运行的是哪种类型的文件,这样,如果有一天我们决定将其作为一个perl文件,任何接口都不会改变。

因此,写run.py是不好的,因为它会指定文件类型;最好只写run


Tags: topathrunpy路径目录脚本cmd
3条回答

澄清编辑后回答

与@F.J.建议的方法相比,我更喜欢下面的方法,因为它不需要用户指定文件类型。请注意,原始问题中没有具体说明这一点,因此他对原始问题的回答是正确的。

让我们调用文件pytest.py,以避免与可能存在的run程序冲突。

在POSIX(MacOs,linux)上,按照@Petr所说的做,这是基于@alberge所说的:

  • chmod +x
  • 添加shebang#!/usr/bin/env python
  • 创建一个目录并将其添加到路径。Linux上通常的位置是:~/bin/对于单个用户,/usr/local/bin/对于所有用户
  • symlink(cp -s)路径下的文件名为pytest,而不是pytest.py

在windows上:

  • 创建一个目录并将其添加到路径。阿飞,这里没有传统的地方,为什么不C:\bin\~\bin\
  • .PY添加到PATHEXT环境变量中,这样Windows就可以将具有python扩展名的文件识别为可运行文件,而无需键入扩展名
  • 将python文件与python.exe解释器关联(Windows资源管理器>;右键单击>;选中“始终使用所选程序”)。python安装程序中有一个选项可以为您执行此操作。
  • symlinkpytest在目录的PATH(使用来自Windows资源管理器的链接外壳扩展或来自cmd的mklink name dest)下有扩展名

现在system( "pytest" );应该可以在两个系统中工作(Linux下的sh,Windows下的cmd

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

python -m run

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

-mmodule-name
Searches sys.path for the named module and runs the corresponding .py file as a script.

可以通过添加

#!/usr/bin/env python

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

相关问题 更多 >