有没有一种方法可以在Bash中运行位于zip文件中的Python脚本?

11

我知道有一种方法可以使用Python导入存储在zip文件中的模块。我创建了一个自定义Python包库并将其保存在zip文件中。

我还想将"任务"脚本放在这个包中,这些脚本使用这个库。然后,在bash中,我想调用压缩文件中所需的脚本,而无需解压缩。

目标是只有一个zip文件需要移动到指定文件夹中以运行我的脚本。

2个回答

18

我终于找到了一种方法来做到这一点。如果我创建一个zip文件,我必须在zip的根目录下创建__main__.py文件。这样,就可以在主文件中启动脚本,并通过以下命令从bash调用:

python myArchive.zip

这个命令将运行__main__.py文件!:)

然后我可以创建.command文件以使用适当的参数来启动脚本。

您还可以在__main__.py文件中放置一些代码来为您提供更多的灵活性,例如传递参数。

例如:python __main__.py buildProject

参考文档在此处:https://docs.python.org/2/library/runpy.html


好的。我以为你想在你的zip归档文件中任意调用“任何”脚本。 - Rod
基本上这就是我想要的,但是不需要解压文件。所以这是我找到的唯一方法。 - ForceMagic
3
我找到了这个网页。您也可以像这样执行没有__main__.py的脚本: PYTHONPATH=/path/to/myArchive.zip python -m [无扩展名的文件名] [参数] - Hyunjun Kim
2
请注意,可以在zip归档中运行任何脚本,也就是说,__main__.py文件不必位于zip文件的根目录中:python /path/to/z.zip/path/within/zip。例如,这可以用于直接运行轮子文件中的代码(它是一个zip文件):python /path/to/wheel1.whl/module1。此外,zip文件始终表现为目录,因此可以在没有zip的情况下测试此功能:python /path/to/any/directory将在给定目录内运行__main__.py - Ivan
然而,你不能运行任何不是 __main__.py 文件的文件。 - DrownedSuccess

3
请查看zipimport。它应该可以直接从安装中使用。您可能需要一些工作来使pythonpath指向您的zip文件/目录。
此模块添加了从ZIP格式存档中导入Python模块(*.py,*.py [co])和包的功能。通常不需要显式地使用zipimport模块;它会自动由内置的导入机制用于sys.path项,这些项是指向ZIP存档的路径。

我的意思是使用bash命令在zip文件内运行Python脚本,以创建一个启动所需脚本的.command文件。也许没有Python是不可能的? - ForceMagic
很遗憾,我不知道有什么可以直接在zip归档文件中调用脚本的方法。不过你可以依靠Python来读取Python脚本,这样就无法使用“main == "main"”的惯用语了。 - Rod
好的,非常感谢!相反,我会尝试找一些方法来创建一个类似的应用程序,使用我的Python文件。因为在当前情况下,我只需要一个文件,我的用户可以点击并且脚本能够运行其模块。我正在考虑使用py2app,因为我使用的是Mac系统。 - ForceMagic
我找到的用Python脚本构建应用程序的最佳链接是: https://dev59.com/zHVD5IYBdhLWcg3wXaYd - ForceMagic
1
与@Rod的评论不同,@HyunjunKim对@ForceMagic的答案的评论是一个独立的答案,在使用一个脚本时对我非常有效,并且其中包含了许多__name__ == "__main__"习惯用法的代码文件。 - Martin Dorey
@MartinDorey 可以随意创建并将响应元素放入其中。当时,我认为只有 Rob 的答案不够或不能立即为我解决问题。 - ForceMagic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接