我想做的是将我的代码发送到远程服务器,该服务器可能安装了不同的python版本和/或可能没有我的应用程序所需的软件包。
现在,要实现这种可移植性,我必须使用解释器和代码来构建可重定位的virtualenv。这种方法存在一些问题(例如,由于--always-copy
无法按预期工作,因此您必须手动将一堆库复制到virtualenv中),并且速度通常很慢。
从理论上讲,有a way可以静态地构建python本身。
我想知道是否可以将解释器和代码一起打包到一个二进制文件中,然后将应用程序作为模块运行。像这样:./mypython -m myapp run
或./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application
。
最佳答案
有两种方法可以解决您的问题
pyinstaller
或py2exe
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”
需要注意的其他事项:
opencv
),则可能必须使用-L
向它们提供目录,然后在GCC标志中使用-l
指定库的名称。有关更多信息,请参阅GCC标志关于python - 有没有办法将python应用程序编译成静态二进制文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39913847/