微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法将python应用程序编译成静态二进制文件?

如何解决有没有办法将python应用程序编译成静态二进制文件?

有两种方法可以解决您的问题

  1. 使用静态生成器(例如冻结)或pyinstaller,或py2exe
  2. 编译使用 cython

我将解释如何使用第二种方法,因为第一种方法不是跨平台和版本的,并且已在其他答案中进行了解释。此外,使用pyinstaller之类的程序通常会导致文件很大,而使用cython会导致文件大小为KB

首先,安装cython。然后,将您的python文件(例如test.py重命名一个.pyx文件

sudo pip install cython
mv test.py test.pyx

然后,您可以将其cython与GCC一起使用进行编译(cython从Python.pyx文件生成C文件,然后GCC编译C文件

(参考https://stackoverflow.com/a/22040484/5714445

cython test.pyx --embed
gcc -Os -I /usr/include/python3.5m -o test test.c -lpython3.5m -lpthread -lm -lutil -ldl

:根据您的python版本,您可能必须更改最后一个命令。要知道您使用的是哪个版本的python,只需使用

$ python -V

现在,您将找到一个二进制文件“ test”

  1. Cython用于将C类型变量定义用于静态内存分配,以加快Python程序的速度。但是,就您而言,您仍将使用传统的Python定义。
  2. 如果您正在使用其他库(例如opencv,例如),则可能必须使用提供它们的目录-L,然后-l在GCC标志中使用指定库的名称。有关此的更多信息,请参阅GCC标志

解决方法

我想做的是将我的代码发送到远程服务器,该服务器可能安装了不同的python版本和/或可能没有我的应用程序所需的软件包。

现在,要实现这种可移植性,我必须使用解释器和代码来构建可重定位的virtualenv。这种方法存在一些问题(例如,由于--always- copy无法按预期工作,您必须手动将一堆库复制到virtualenv中),并且通常速度较慢。

从理论上讲,有一种方法可以静态地自行构建python。

我想知道是否可以将解释器和代码一起打包到一个二进制文件中,然后将应用程序作为模块运行。那样的东西:./mypython -m myapp run./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。