【问题标题】:Distribute a python script in bytecode precompiled + all necessary libraries以预编译的字节码 + 所有必要的库分发 python 脚本
【发布时间】:2016-07-01 18:52:25
【问题描述】:

我在 python 中为我的客户制作了一个(一个文件)脚本,该程序很成功,现在需要分发给我的 12 名客户员工。

我制作的脚本使用了很多库(导入),其中一些根本不受欢迎,所以问题来了:

有没有办法分发我已经编译成字节码的程序?因此,用户可以通过简单地执行“python myProgram.pyc”或“myProgram.pyc”(如果它具有 +x 属性)来运行它,我知道这在 Java 中完全可以通过在 JAR 文件中编译库来实现,是python有什么类似的吗?

请不要推荐我 py2exe,因为对于我想要的东西来说太远了,或者其他类似的工具,我只想分发一个包,其中包含已经预编译为字节码的所有必要库,因此最终用户不需要担心安装库、pip、github、自定义东西或任何东西。希望您能帮助我,否则我将不得不将整个项目移植到 Java。

【问题讨论】:

标签: python bytecode distribute debian-based


【解决方案1】:

如果您的客户员工机器是 Windows,请使用 py2exe http://py2exe.org/

如果 Mac 选择 py2app https://pypi.python.org/pypi/py2app/

cx_Freeze http://cx-freeze.sourceforge.net/ 是跨平台的,它应该会生成可以在任何安装了 Python 的操作系统上运行的可执行文件。

PyInstaller http://www.pyinstaller.org/ 也不错。

但是,这些方法不会编译,因此会提高运行时性能。而是一种将脚本作为包含所有必要模块的单个可执行文件分发的方法。

您可以使用已编译的 .pyc 文件及其周围的包装器来执行并将其打包为单个可执行文件。但是,这样做的性能改进值得商榷。

编辑: 不过,它已经很久了,最近开始使用 cython,它可能是解决这个问题的一个合理的解决方案。如果不是全部,定义变量类型应该在问题中提出。

【讨论】:

  • 请阅读我的问题,我想不惜一切代价避免使用 py2exe 或 py2app,我想要分发一个 JAR/ZIP 之类的包,其中嵌入了所有必要的库,这样用户就可以运行我的程序而不安装任何其他东西。我一直在寻找几天,但到目前为止没有任何效果,现在我正在将我的应用程序移植到 Java,该死的 python。
  • 嗨@Diego,pyinstalker 也死了。它将所有内容打包成一个独立的压缩包。在 Linux 中双击或运行 ./ 不需要任何外部依赖。 py2exe 和 py2app 的作用相同。也许你可以在移植到java之前尝试。我确实为我的几个 python 应用程序使用了 py2app、pyinstaller 和 CX_freeze 并且工作正常。我能够通过运行来分发用户可以运行的地方。不需要任何安装。
  • 如果您误解了,是您必须安装 py2exe 来生成单个独立的可执行文件,而不是您的客户端
  • 再一次,转换为二进制根本不是一个好的解决方案,它使脚本变得超级繁重,带有许多无用的依赖项,员工将不得不在他们的 Windows 机器上安装 VB C 运行时,等等。 .. pyinstaller 甚至不能与我的脚本一起使用,可能是因为自定义库和 py2exe 需要 python 3.3,我的结论是 Python 虽然有利于快速开发它,但对于专门分发给“没有技术”的人来说很糟糕,我永远不会再使用它了。
  • 甚至,我有自定义库。但是能够将它们与具有适当配置文件的可分发包一起打包。我不明白很多无用的依赖关系超重是什么意思。虽然您决定切换到其他语言是个人的,但就我的经验而言,可以将它们打包为单个可执行文件而没有不必要的依赖关系。或者我可能不完全理解您在寻找什么?如果可能,请详细说明您的问题或意见。
猜你喜欢
  • 1970-01-01
  • 2013-06-08
  • 2017-12-22
  • 2016-02-11
  • 2013-07-15
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多