如何部署python脚本?
Posted
技术标签:
【中文标题】如何部署python脚本?【英文标题】:How to deploy python script? 【发布时间】:2019-02-10 17:32:34 【问题描述】:这听起来像是一个非常开放式的问题,但我是一个 Python 爱好者,对这个开发世界很陌生。 我开发了一个 python 脚本,它接受输入并根据我在脚本中放置的算法给出输出。我想使用这个脚本并将其打包成可供没有技术思维的最终用户使用,并且只关心他们提供的输入和获得的输出。
我已经使用 Jupyter Notebook 开发了这个复杂的代码,我想知道如何打包或部署这个代码,以便最终用户可以使用它,而不会看到它是如何工作的,因为这可能会让他们不知所措。
任何人都可以帮助我了解如何做到这一点吗? 开源的东西将是首选。
谢谢
【问题讨论】:
听起来你需要一个前端。您将处理什么样的用户输入? 只是一个像这样的id:123ABC0456K 请注意,运行您的脚本的其他人可能需要他们自己的 Python 安装/环境等。这可能是您是否希望用户能够在本地运行的最佳解决方法的考虑或者远程处理是否最好。 @TD-Asker 我没有想到这一点。有什么办法超越这个吗?我的最终用户是一个对编码一无所知的业务类型的人。他甚至不知道有一种叫做python的东西哈哈。那么我该如何超越呢?使用批处理会有帮助吗? 批处理文件仍然需要在客户端机器上安装 Python,因为它试图在本地执行 Python。您始终可以将相关安装脚本添加为.bat
文件的一部分,或发送为客户端准备环境的.exe
。除此之外,我不得不参考其他人的专业知识。如果做不到这一点,请远程托管并为客户端提供登录信息以及如何更改/运行.bat
文件等的说明。
【参考方案1】:
假设您没有 GUI,我将使用批处理 (.bat) 文件来调用带有提供的输入的脚本。
your_script.bat:
set VAR_1=this
set VAR_2=that
python your_script.py %VAR_1% %VAR_2%
然后通过
在python脚本中检索这些参数sys.argv[1] sys.argv[2]
对于最终用户,只需双击!
我希望你明白了
[编辑:sys.argv[0] 是您的脚本的名称]
【讨论】:
请注意,这需要 .bat 脚本的任何用户在本地安装正确的 Python 环境。【参考方案2】:我想通过提出几种部署 Python 脚本或模型的方法来总结这个问题:
Docker:这是托管脚本和在线部署机器学习模型的最流行方式之一。您可以使用 Docker 将代码容器化,并使用不同的应用将其作为微服务托管。 PEX:PEX 是 Twitter 正在开发的一个聪明的工具,它允许 Python 代码作为可执行的 zip 文件发布。 AWS:使用 AWS,您可以创建一个免费帐户并开始托管/部署。网上有很多资源。 PYSimple、Pyinstaller 和 Sparrow:正如上面的答案中提到的,我们也可以使用这些包来完成任务。请阅读以上内容。 Flask 应用程序:如果您不想使用 Docker,使用简单的 Flask 应用程序,您将能够在线托管您的脚本。但是由于它不是容器化的,所以会有很多问题。最好使用 Docker。 py2exe:如果您希望将 Python 文件转换为 Windows 可执行文件,Click here cx_Freeze:和py2exe类似,你也可以用这个我会继续添加更多内容,但我认为最好的方法是使用 Docker。希望这会有所帮助。
【讨论】:
【参考方案3】:为了完整起见,应该提到 Spotify 的 dh-virtualenv,它可以将 python 代码打包为 debian-package。
作为起点,您可以使用这篇博文:How We Deploy Python Code
【讨论】:
【参考方案4】:使用Sparrow 将您的脚本交付给最终用户。 works nice 也带有 Python 脚本。
基本上您只需将您的requirements 声明为requirements.txt
文件并将您的脚本命名为task.py
,您可以将脚本内的输入参数处理为:
from sparrow6lib import *
foo = config()['foo']
bar = config()['bar']
然后您将脚本上传到 SparrowHub:
$ nano sparrow.json
"name": "my-script",
"version": "0.1.0",
"description" : "this is my script",
$ ls -1
task.py
requirements.txt
sparrow.json
$ s6 --upload
最终最终用户只需将您的脚本用作:
$ s6 --install my-script
$ s6 --plg-run my-script@foo=1,bar=2
PS。披露我是工具作者。如果您在打包脚本方面需要任何帮助,请告诉我。
PS2 我最近将 Sparrow 移植到 Raku 时更改了原始答案
【讨论】:
Sparrow 现在作为 Sparrow6 移植到 Raku,使用相同的功能 - github.com/melezhik/Sparrow6/blob/master/documentation/…【参考方案5】:PyInstaller是一个强大的opensource工具,用于python项目的跨平台部署/分发。
*注意:虽然我没有使用 PyInstaller 分发 Jupyter Notebook 的经验,但使用 guide 似乎是合理的。
通过pypi安装:
pip install pyinstaller
没有控制台的代码分发可以这么简单:
pyinstaller --noconsole script.py
然后你可以在你的工作目录的 dist 文件夹下找到你的 .exe(Window)。
【讨论】:
PyInstaller 太棒了!很棒的工具!以上是关于如何部署python脚本?的主要内容,如果未能解决你的问题,请参考以下文章