希望在我的 pyinstaller 捆绑应用程序中使用包含一个 redis 服务器来存储应用程序特定数据。
在开始动手之前,需要一些指导。
这些是要遵循的步骤吗?
(1) 捆绑 redis-server 可执行文件。并通过我的 bundle 中的一些脚本将其作为独立应用程序运行。
(2) 在python中使用redis客户端包连接redis-server
我想 (2) 应该肯定有效。但是有什么简单的方法可以做到 (1)。
最佳答案
您可以使用命令行上的 --add-binary
选项或 Analysis
调用的 binaries
参数捆绑任意二进制文件你的 .spec
文件。查看manual有关详细信息,但举一个例子:
pyinstaller -F main.py --add-binary=`which redis-server`:bin
我不知道运行任意可执行文件的方法,但您可以在您的应用程序中使用一些 python 代码来检测您何时被捆绑、找到 redis 二进制文件并启动它。同样,您可以查看 documentation有关如何进行此操作的详细信息,但再次提供一个示例(从 another answer 中窃取的可选上下文管理器优雅):
import sys
import os
import subprocess
from contextlib import contextmanager
@contextmanager
def bundledredis():
proc = subprocess.Popen(
[os.path.join(sys._MEIPASS, 'bin', 'redis-server')])
yield
proc.terminate()
@contextmanager
def optional(condition, context_manager):
if condition:
with context_manager:
yield
else:
yield
def realmain():
print('doing stuff')
def main():
with optional(getattr(sys, 'frozen', False), bundledredis()):
realmain()
if __name__ == '__main__':
main()
关于python - 使用 pyinstaller 捆绑 redis 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279091/