当前位置: 首页 > 面试题库 >

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

岑鸣
2023-03-14
问题内容

有没有一种可移植的方法可以在不编写完整路径的情况下从外壳运行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,因此每个人都可以使用不同的语法运行命令。因此,让我们说,最可移植的方法是将相同的输入提供给shcmd.exe,在两种情况下都运行python脚本。在这种情况下,您可以从ANSI Csystem函数(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 / to /
PATH环境变量中添加其目录。但这对Windows不起作用,因为Windows不支持像Linux这样的可执行文件元数据属性,并且因为/ usr / bin
/ env在Windows中不一定存在。

3)扩展

最终,在我的脑海中,我希望找到一种不指定运行哪种文件的解决方案,因此,如果有一天我们决定制作一个文件,例如一个perl文件,则不会更改任何接口

因此,写入run.py会很糟糕,因为它将指定文件类型。最好能只写run


问题答案:

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

python -m run

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

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



 类似资料:
  • 问题内容: 我已经在.jar文件清单中指定了Java程序的主类和类路径,但有时我想运行与该属性指定的类不同的类。我可以在仍然从清单中拉出类路径的同时让Java启动此类,这样我就不必在命令行上用来指定整个东西了吗? 问题答案: 只需使用-cp将jar文件放在命令行中即可;然后,即使您未使用-jar,Java也会观察清单中的classpath属性:

  • 问题内容: 给定完整路径,如何在Python 3.4中加载Python模块? 类似的问题如何在给定完整路径的情况下导入模块?涵盖了3.4之前的Python版本,但是得出的结论是,对于给出的答案,Python 3.4的支持已被弃用,因此赞赏所有针对Python 3.4的解决方案。 请注意,此问题与“导入任意python”源文件不是重复的。(Python 3.3+),因为对此的答案也使用了Python

  • 问题内容: 我写了一个脚本,希望它可以在bash中通过 管道传递 。就像是: 可能吗?怎么样? 问题答案: 看到这个简单的: 运行: 输出: debug_output.txt内容:

  • 问题内容: 我正在构建一个Python应用程序,不想强迫我的客户安装Python和模块。 那么,有没有办法将Python脚本编译为独立的可执行文件? 问题答案: 你可以使用py2exe作为已应答文件,并使用cython在中转换密钥件,在Windows和的中转换等编译过的文件,比普通的和文件要难得多(还可以提高性能!)

  • 问题内容: 我写了一些要在其他计算机上运行的.py文件。目标机器未安装python,因此我无法通过策略“安装”它。我所能做的就是复制文件,运行我的东西,然后将其删除。 我试图将开发python文件夹移至目标计算机,将cd移至python文件夹并运行。它给我一个错误,指出未注册python.dll。如果我注册了DLL,这可能会使我跨过“违反政策”行。 无论如何,我是否可以在没有实际安装python的

  • 我需要一个apache/php来识别ffmpeg命令,而不需要指定/usr/local/bin/ffmpeg的完整格式 从命令行调用ffmpeg执行程序通过web从php调用ffmpeg不执行程序通过web从php调用 /usr/local/bin/ffmpeg执行程序 原因:php脚本调用youtube dl(编译程序)并在内部执行ffmpeg 提前感谢-尝试了ffmpeg路径:哪个ffmpeg

  • 问题内容: 是否可以不执行而检查bash脚本语法? 使用Perl,我可以运行。bash脚本有任何等效命令吗? 问题答案: 也许是一个明显的警告:这可以验证语法,但不会检查您的bash脚本是否尝试执行不在您的路径中的命令,例如而不是。

  • 问题内容: 当我打印一个numpy数组时,我得到了一个截断的表示形式,但是我想要完整的数组。 有什么办法吗? 例子: 问题答案: 用途