是否有一种可移植的方法从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 C system
函数运行相同的命令,该函数在POSIX上使用sh
,在Windows上使用cmd
。 ANSI C是Windows和POSIX中常见的几件事之一,在这种情况下,这个问题就有了一些意义。
2)可执行
接下来,短语turning run.py into an executable
不是很清楚。我正在讨论chmod +x run.py
的Linux策略,添加一个shebang #!/usr/bin/env python
,并添加其目录系统将〜/ long / path /添加到/ PATH环境变量。但是这对Windows不起作用,因为Windows不支持像Linux这样的可执行文件元数据属性,因为/ usr / bin / env不一定存在于Windows中。
3)扩展
最后,在我的脑海中,我希望找到一个没有指定运行什么类型文件的解决方案,这样如果有一天我们决定制作它,比如说,perl文件,那么接口就不会改变。
因此,编写run.py
会很糟糕,因为它会指定文件类型;能够只写run
答案 0 :(得分:15)
如果包含run.py
的目录位于模块搜索路径上(例如,PYTHONPATH
环境变量),您应该可以像这样运行它:
python -m run
以下是-m
命令行选项的文档:
-m
module-name
在sys.path
中搜索指定的模块,并将相应的.py
文件作为脚本运行。
答案 1 :(得分:5)
您可以通过添加
使python脚本可执行#!/usr/bin/env python
到文件的开头,并使其chmod +x
可执行。
答案 2 :(得分:2)
澄清编辑后回答
我更喜欢@ F.J建议的方法。因为它不要求用户指定文件类型。请注意,原始问题中未指明这一点,因此他对原始问题的回答是正确的。
让我们调用文件pytest.py
以避免与现有的run
程序发生冲突。
在POSIX(MacOs,linux)上做@Petr所说的,这是基于@alberge所说的:
chmod +x
#!/usr/bin/env python
/usr/local/bin/
适用于所有用户cp -s
)PATH下的文件,其基本名称为pytest
,而不是pytest.py
在Windows上:
C:\bin\
和~\bin\
?.PY
添加到PATHEXT
环境变量,以便Windows将具有python扩展名的文件识别为可运行文件,而无需您键入扩展名python.exe
解释器相关联(Windows资源管理器>右键单击>检查“始终使用所选程序”)。 python安装程序上有一个选项可以为您执行此操作。pytest
到PATH
下的目录(使用Windows资源管理器中的链接外壳扩展或来自cmd的mklink name dest
)现在system( "pytest" );
应该适用于两个系统(Linux下的sh
,Windows下的cmd
)
答案 3 :(得分:0)