作者 主题:[已解决] Python应用程序作为单个独立可执行文件分发 (Read 882 times)

0会员和1位客人正在查看此主题。

 在线的 罗格

  • 超级贡献者
  • ***
  • 帖子:2814
  • 国家:  RO.
[求助] Python应用程序作为单个独立可执行文件分发
« on: 2019年11月08日,下午12:13:04»
是否可以在单个文件中打包一个Python脚本/应用程序+ Python解释器,该文件只会在另一台没有安装Python的另一台计算机上运行?

更精确:
- 我有一个我制作的python脚本,调用'instrument.py',在我的开发机上运行罚款
- 我想在另一台干净的计算机上运行此脚本,没有安装Python,也不是't have internet
- 最好是一个"instrument.exe"自包含的文件,刚刚在任何其他干净的计算机上运行
- 可能是每个操作系统的不同文件,即"instrument.exe"对于Windows和另一个文件"instrument"对于Linux来说就好了

是否可以将Python应用程序分发为单个可执行文件?  How?

[解决了]
代码: [选择]
# install pip
sudo apt-get update
sudo apt-get install python-pip

# install PyInstaller
pip install pyinstaller

# turn a python script into a standalone executable file
pyinstaller my_python_code.py --onefile --clean

# to run the standalone executable file
./dist/my_python_code
« 上次编辑:2019年11月9日,12:37:23 rogeorge »
 

 离线 Mariush.

  • 超级贡献者
  • ***
  • 帖子:4039
  • 国家:  RO.
  • .
Re:Python应用程序作为单个独立可执行文件分发
« 回复#1开: 2019年11月08日,03:15:56 PM»
您可以为应用程序进行安装程序,单个可执行文件。
它会向用户询问目标文件夹,然后提取那里的文件。

例如,查看innoSetup: http://www.jrsoftware.org/isinfo.php
或者更基本的(接口WISE)NSIS: //nsis.sourceforge.io/Main_Page

至于使脚本成为EXE,AFAIK Python是一种解释的语言。

您可以将脚本捆绑到脚本运行所需的最小内容(某种类型的Python运行时),并且您可以制作一种非常小的可执行文件(50-100 kB),它只需将脚本作为参数开始运行时。

我不'T知道如何做到,但是使用Python制作的应用程序的一个很好的例子是Caliber: //calibre-ebook.com/

作者在此处提供详细的构建说明 - //github.com/kovidgoyal/build-calibre -  but it'是一个非常复杂的应用程序,有很多依赖项,所以我'm不确定构建过程如何创建实际的可执行文件。

Googling导致PyInstaller推荐,也许这对您的需求来说足够:

官方网站: //www.pyinstaller.org/

一些文章:

//ourcodeworld.com/articles/read/273/how-to-create-an-executable-exe-from-a-python-script-in-windows-using-pyinstaller
//datatofish.com/executable-pyinstaller/
 
« 上次编辑:2019年11月8日,03:21:30 PM由Mariush »
 

 在线的 罗格

  • 超级贡献者
  • ***
  • 帖子:2814
  • 国家:  RO.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#2开: 2019年11月08日,03:54:13 PM»
I'已经尝试了pyinstaller,它仅适用于本机Python安装。  If I'm使用Python虚拟环境,或Conda,pyinstaller失败。

将看看你提到的其他方法,谢谢。

与此同时,我学会了如何从来源构建Python。 这样,我最终可以使用一个文件夹中包含的Python,并且可以从该文件夹运行它。 在内置的Python中,可以在本地安装其他模块。 因此,我最终可以在单个文件夹中找到所有文件夹,将该文件夹zip zip并将其解压缩到另一台计算机,而且应该运行,而无需任何安装。 如果由定义PythonPath环境变量的本地脚本启动,它应该仅在该文件夹中运行,而不进入可能在同一台计算机上共存的其他最终的Python安装。

不确定此方法是否是执行方法的正确方法。
« 上次编辑:2019年11月09日,12:18:45 rogeorge »
 

 离线 Mariush.

  • 超级贡献者
  • ***
  • 帖子:4039
  • 国家:  RO.
  • .
Re:Python应用程序作为单个独立可执行文件分发
« 回复#3开: 2019年11月08日,04:09:49 PM»
我在考虑学习Python但我've决定先学习(golang): //golang.org/

 
It'S很容易学习,并建立在并发的东西中,使得更容易制作同时做大量的应用程序。

在此之上,它静态地编译了所有当前窗口或Linux可执行文件的所有内容,没有所需的任何运行时间(由于此,因此,在用UPX压缩后大约为500 KB)
 
最大的下行是它't有任何本机GUI库或函数,默认情况下,您只能拨出命令提示符应用程序。
有一个包,可以使用qtwidgets,gtk和其他东西并创建Windows和菜单和东西。

It'S也超级简化使用内置的Web服务器只需使用JavaScript和CSS和CSS和HTML为单个网站创建一个本地Web服务器,并在浏览器中的可执行文件和JavaScript中的文件可以通过WebSocket将数据数据包交换数据包或json或其他手段。

那里'S还包括electronjs(基本上是创建应用程序窗口的微型Web浏览器)的包


 

 离线 siliconwizard.

  • 超级贡献者
  • ***
  • 帖子:6198
  • 国家:  FR.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#4开: 2019年11月08日,04:14:27 PM»
最小的Python运行时仍将是巨大的,对吗?你有一个想法吗?
 

 离线 Georgeofthejungle.

  • 超级贡献者
  • ***
  • !
  • 帖子:2704
  • 国家:  TR.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#5: 2019年11月08日,04:58:11 PM»
那里'S还包括electronjs(基本上是创建应用程序窗口的微型Web浏览器)的包
但是's javascript(nodejs)。原子也这样工作( //atom.io/ )
另一个社会从真理漂移,它将讨厌那些说话的人。
 

 在线的 罗格

  • 超级贡献者
  • ***
  • 帖子:2814
  • 国家:  RO.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#6开启: 2019年11月08日,05:37:26 PM»
最小的Python运行时仍将是巨大的,对吗?你有一个想法吗?

减压后约50 MB和大约200 MB。 这适用于Python 3.5.9构建,而不删除任何标准(但未使用)的库。

通过仔细地整理所有未使用的库,大小可能会更小左右10倍,但这将是一个工具的作业,如pyinstaller。

也许Pyinstaller可以在源代码Python(但没有虚拟环境)上正确运行,应该尝试一下。 我刚刚发现有一种方法可以告诉pyinstaller在哪里看起来,在使用venv时不在哪里看,但这将是手动维护的另一件事,所以使用pyinstaller的展示者。

 离线 背叛

  • 常规贡献者
  • *
  • 帖子:137
Re:Python应用程序作为单个独立可执行文件分发
« 回复#7: 2019年11月08日,05:55:02 PM»
......在那之上,它静态地编译了所有常驻Windows或Linux可执行文件,而无需任何运行时间......

我同意这是一个很好的特点,但也很奇怪,它被吹捧为使用它的理由。传统上,编程语言始终生成单个可执行文件。奇怪的一个是Vers Vack的Visual Basic,但是当VB获得完整的编译器时被纠正。但是,C,C ++,D,Delphi,ASM,QuickBasic,以及您的命名,所有生成单个可执行文件。大多数编译器都有一个选择动态链接到运行时库而不是静态链接,但它是一个选项,而不是要求。

这是一件事让我绕过码头。如果您在构建输出中有大量不同的文件依赖项,请帮助您帮助您。但你应该'T在第一位置有这个!如果你在容器中隐藏它,那么一团糟就是一团糟。支持单个可执行输出的支持应被视为所有编程语言的预期,而不是独一无二的。

所以是的,我不'T对Python有很好的印象。
 

 离线 jc101

  • 频繁的贡献者
  • **
  • 帖子:363
  • 国家:  GB.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#8开: 2019年11月06日,06:06:37 PM»
I'最近完成了这一点,转动一个Python脚本,用于将Excel电子表格纳入.rtf格式文件。

我用了这一点 //pypi.org/project/auto-py-to-exe/ 它将小Python脚本,几百行变为单个5.3MB exe文件。 最终用户根本没有安装在其计算机上的Python。 嵌入所有依赖项和额外的Python也导入到文件中。

对我来说很棒。
 

 离线 Mariush.

  • 超级贡献者
  • ***
  • 帖子:4039
  • 国家:  RO.
  • .
Re:Python应用程序作为单个独立可执行文件分发
« 回复#9: 2019年11月08日,06:19:56 PM»
......在那之上,它静态地编译了所有常驻Windows或Linux可执行文件,而无需任何运行时间......

我同意这是一个很好的特点,但也很奇怪,它被吹捧为使用它的理由。

传统上,编程语言始终生成单个可执行文件。奇怪的一个是Vers Vack的Visual Basic,但是当VB获得完整的编译器时被纠正。但是,C,C ++,D,Delphi,ASM,QuickBasic,以及您的命名,所有生成单个可执行文件。大多数编译器都有一个选择动态链接到运行时库而不是静态链接,但它是一个选项,而不是要求。


至少Visual Basic 6具有1个1.4 MB DLL,为最低要求。

大多数C ++可执行文件仍然依赖于Windows中的某些运行时DLL文件(例如Msvcrt.dll),或者您必须下载并安装各种运行时软件包  .. see Visual C ++在Google上再发布.
.NET就像糟糕,依赖于各种.NET版本的工作。
据我所知,Go拥有在可执行文件中内置的一切。我可以简单地将exe文件发送给刚安装Windows的人,它将只需工作。
 

 离线 bd139

  • 超级贡献者
  • ***
  • 帖子:18480
  • 国家:  GB.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#10: 2019年11月08日,06:25:41 PM»
最后我做了这个我用[1] py2exe来构建二进制文件并用wix [2]发布它。 Wix是一块狗屎。找到更好的东西!


[1] http://www.py2exe.org/
[2] //wixtoolset.org/
 

 离线 siliconwizard.

  • 超级贡献者
  • ***
  • 帖子:6198
  • 国家:  FR.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#11开: 2019年11月08日,06:55:50 PM»
最小的Python运行时仍将是巨大的,对吗?你有一个想法吗?

减压后约50 MB和大约200 MB。 这适用于Python 3.5.9构建,而不删除任何标准(但未使用)的库。

哎哟。但是'没有任何第三方库,您可能正在使用......
所以基本上,将Python应用程序分发为独立将需要200MB。  :o
(顺便提及,JRE在磁盘上大致相同。)

 

 离线 bd139

  • 超级贡献者
  • ***
  • 帖子:18480
  • 国家:  GB.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#12: 2019年11月08日,07:22:11 PM»
这太小了。我知道一家拥有3个演出的二进制有效载荷,软件都是他妈的  :palm:
 

 离线 siliconwizard.

  • 超级贡献者
  • ***
  • 帖子:6198
  • 国家:  FR.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#13开启: 2019年11月08日,08:07:47 PM»
这太小了。我知道一家拥有3个演出的二进制有效载荷,软件都是他妈的  :palm:

 :-DD

这一切都非常令人沮丧......
 

 离线 bd139

  • 超级贡献者
  • ***
  • 帖子:18480
  • 国家:  GB.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#14: 2019年11月08日,08:44:44 PM»
哦,是的,确实这很可怕。我是一个大量的“更少的”推荐人。不幸的是,我倾向于在少在公司停车场埋藏在窗外的顾问下埋藏的一词的环境中的环境  :-DD
 

 在线的 罗格

  • 超级贡献者
  • ***
  • 帖子:2814
  • 国家:  RO.
Re:Python应用程序作为单个独立可执行文件分发
« 回复#15: 2019年11月09日,上午12:17:42»
在带有Ubuntu 18.04 LT的清洁虚拟机上,PyInstaller工作正常。

代码: [选择]
pyinstaller mtx3283.py --onefile --clean生成独立的可执行文件,单个文件仅为4.2 MB。   :-+

 在线的 罗格

  • 超级贡献者
  • ***
  • 帖子:2814
  • 国家:  RO.
Re:[已解决] Python应用程序作为单个独立可执行文件分发
« 回复#16开: 2019年11月09日,11:29:18 AM»
添加关于pyinstaller的一件事:

在运行时,一个文件可执行文件在/ tmp中创建一个临时文件夹,然后在退出时删除它。 对于正常应用程序来说是可以的,但如果程序是每秒调用数百次的命令行工具,则创建临时文件夹,打开包装,然后删除它可能会成为问题。 我的测试程序非常小,但大应用程序将比本机可执行文件慢慢。

如果是,这可以减轻"--onefile"创建可执行分发时省略了参数。  Without "--onefile"切换,其中包含许多文件的可分发文件夹(您可以稍后将按稍后压缩和分发为单个zip文件的文件夹)而不是单个文件。 在这个前一个情况下,不会创建额外的临时文件夹,因此它将比一个文件版本中的所有速度快得多。


分享我

 掘客   Facebook  诽谤   美味的  Technorati.   推特    谷歌    雅虎
SMF.