我想要做的是将我的代码发送到远程服务器,可能安装了不同的python版本和/或可能没有我的应用程序所需的软件包.
现在要实现这种可移植性,我必须使用解释器和代码构建可重定位的virtualenv.这种方法有一些问题(例如,你必须手动将一堆库复制到你的virtualenv中,因为--always-copy它不能按预期工作)并且通常很慢.
我想知道我是否可以将解释器与我的代码打包成一个二进制文件并将我的应用程序作为模块运行 类似的东西:./mypython -m myapp run或./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application.
R. *_*hna 74
有两种方法可以解决您的问题
我将解释如何使用第二种方法来实现它,因为第一种方法不是跨平台和版本,并且已在其他答案中进行了解释.此外,使用像pyinstaller这样的程序通常会导致巨大的文件大小,因为使用cython会导致文件大小为KB
首先,安装cython.然后,将您的python文件(比如test.py)重命名为pyx文件
$ sudo pip install cython
$ mv test.py test.pyx
Run Code Online (Sandbox Code Playgroud)
然后,你可以使用cython和GCC来编译它(Cython从Python .pyx文件生成一个C文件,然后GCC编译C文件)(参考/sf/answers/1542833911/ 5714445)
$ cython test.pyx --embed
$ gcc -Os -I /usr/include/python3.5m -o test test.c -lpython3.5m -lpthread -lm -lutil -ldl
Run Code Online (Sandbox Code Playgroud)
注意:根据您的python版本,您可能必须更改最后一个命令.要知道您正在使用哪个版本的python,只需使用
$ python -V
Run Code Online (Sandbox Code Playgroud)
您现在将拥有一个二进制文件'test',这正是您要寻找的
注意:Cython用于使用C-Type Variable定义进行静态内存分配,以加速Python程序.但是,在您的情况下,您仍将使用传统的Python定义.
注意2:如果您正在使用其他库(例如opencv),则可能必须使用-L为它们提供目录,然后在GCC Flags中使用-l指定库的名称.有关这方面的更多信息,请参阅GCC标志
| 归档时间: |
|
| 查看次数: |
34449 次 |
| 最近记录: |