我正在尝试将我的代码发送到远程服务器,该服务器可能安装了不同的 python 版本和/或可能没有我的应用所需的包。
现在要实现这种可移植性,我必须使用解释器和代码构建可重定位的 virtualenv。这种方法存在一些问题(例如,您必须手动将一堆库复制到您的 virtualenv 中,因为 --always-copy
无法按预期工作)并且通常很慢。
有(理论上)a way静态构建python本身。
我想知道我是否可以将解释器与我的代码打包成一个二进制文件并将我的应用程序作为模块运行。类似的东西:./mypython -m myapp run
或 ./mypython -m gunicorn -c ./gunicorn.conf myapp.wsgi:application
.
最佳答案
有两种方法可以解决您的问题
pyinstaller
或 py2exe
cython
此答案解释了如何使用第二种方法进行操作,因为第一种方法不是跨平台和版本的,并且已在其他答案中进行了解释。此外,使用 pyinstaller 之类的程序通常会导致文件很大,而使用 cython 会导致文件更小
首先,安装cython
。
sudo -H pip3 install cython
然后,您可以使用 cython
从 Python .py
文件中生成 C 文件
(引用 https://stackoverflow.com/a/22040484/5714445 )
cython example_file.py --embed
获取当前python版本后使用GCC编译(注意:以下假设您正在尝试将其编译为Python3)
PYTHONLIBVER=python$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')$(python3-config --abiflags)
gcc -Os $(python3-config --includes) example_file.c -o output_bin_file $(python3-config --ldflags) -l$PYTHONLIBVER
您现在将拥有一个二进制文件 output_bin_file
,这就是您要查找的内容
其他注意事项:
example_file.py
更改为您实际尝试编译的任何文件。opencv
),您可能必须使用 -L
向它们提供目录,然后指定在 GCcflags中使用 -l
的库。有关这方面的更多信息,请参阅 GCcflagshttps://stackoverflow.com/questions/39913847/
相关文章:
android - 使用 gradle 签署产品 flavor
build - CMakeLists.txt 中未使用 CMAKE_BUILD_TYPE
javascript - 我可以使用 webpack 分别生成 CSS 和 JS 吗?
visual-studio - VS2005 : Assembly '
visual-studio - Visual Studio 在构建期间不断挂起
ios - Swift 框架不适用于命名为 'Debug' 或 'Release' : No suc