有没有办法运行来自 bash 的 zip 文件中的 python 脚本?
Posted
技术标签:
【中文标题】有没有办法运行来自 bash 的 zip 文件中的 python 脚本?【英文标题】:Is there a way to run a python script that is inside a zip file from bash? 【发布时间】:2011-04-15 05:29:15 【问题描述】:我知道有一种方法可以使用 python 导入 zip 文件中的模块。我在一个 zip 文件中创建了一种自定义 python 包库。
我想将我的“任务”脚本也放入这个包中,这些脚本正在使用该库。然后,使用 bash,我想在 zip 文件中调用所需的脚本而不提取 zip。
目标是当我想运行我的脚本时,只有一个 zip 可以移动到指定的文件夹中。
【问题讨论】:
【参考方案1】:我终于找到了一种方法来做到这一点。如果我创建一个 zip 文件,我必须在 zip 的根目录下创建 __main__.py
。因此,可以在 main 中启动脚本并使用以下命令从 bash 调用 if:
python myArchive.zip
此命令将运行__main__.py
文件! :)
然后我可以创建.command
文件以使用适当的参数启动脚本。
您还可以在__main__.py
文件中添加一些代码,以便在需要传递参数时提供更大的灵活性。
例如:python __main__.py buildProject
参考文档在这里:https://docs.python.org/2/library/runpy.html
【讨论】:
太棒了。我以为您想在 zip 存档中任意调用“任何”脚本。 基本上这是我想要的,但没有解压缩文件。所以这是我发现这样做的唯一方法。 我找到了这个web page。你也可以像这样运行没有__main__.py
的脚本:PYTHONPATH=/path/to/myArchive.zip python -m [filename without extension] [args]
请注意,可以运行 zip 存档中的任何脚本,也就是说,__main__.py
文件不必位于 zip 文件的根目录中:python /path/to/z.zip/path/within/zip
。例如,这可用于直接运行 wheel 文件(zip)中的代码:python /path/to/wheel1.whl/module1
。此外,zip 文件始终表现为目录,因此可以在没有 zip 的情况下进行测试:python /path/to/any/directory
将在给定目录中运行__main__.py
。【参考方案2】:
看看zipimport。它应该直接从安装中工作。您可能需要做一些工作才能使 pythonpath 指向您的 zip 文件/目录。
这个模块增加了导入的能力 Python 模块 (*.py, *.py[co]) 和 来自 ZIP 格式档案的软件包。它 通常不需要使用 显式地 zipimport 模块;它是 由内置自动使用 sys.path 项的导入机制 是 ZIP 档案的路径。这是 ZIP 档案的路径。
【讨论】:
我的意思是使用 bash 命令在 zip 中运行 python 脚本,以创建一个启动所需脚本的 .command 文件。也许没有python就不可能? 我不知道有任何东西可以直接在 zip 存档中调用脚本。可悲的是,您必须依靠 python 来读取 python 脚本,这会阻止您使用 main == "main" 成语。 好的,非常感谢!相反,我会尝试找到一些东西来创建一个应用程序,比如我的 python 文件。因为在当前情况下,我只需要一个用户可以单击的文件,并且脚本与它的模块一起运行。我在考虑 py2app,因为我在 Mac 上。 我找到的使用 python 脚本构建应用程序的最佳链接:***.com/questions/2933/an-executable-python-app Contra @Rod,上面,@HyunjunKim 对@ForceMagic 的回答的评论,这本身就应该是一个答案,对我来说,它的脚本工作得很好,它是 zip 中的众多脚本之一,它使用__name__ == "__main__"
成语。以上是关于有没有办法运行来自 bash 的 zip 文件中的 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
Git Bash - “没有这样的文件”运行具有来自 cmd.exe 的完全限定路径的 bash 脚本
有没有办法自动将命令历史保存到 cmd.exe 中的文件中,类似于 bash 的 bash_history?