希望使用一个包含redis服务器来存储我的pyinstaller捆绑应用程序的特定于应用程序的数据 在动手实践之前,需要一些指导。
以下是要遵循的步骤吗? (1)捆绑redis-server可执行文件。并通过捆绑包中的一些脚本将其作为独立应用程序运行 (2)使用python中的redis客户端软件包连接到redis-server
我猜(2)肯定会奏效。但有没有简单的做法(1)。
答案 0 :(得分:0)
您可以在命令行中使用--add-binary
选项捆绑任意二进制文件,或在binaries
文件中使用Analysis
参数捆绑.spec
参数。有关详细信息,请查看manual,但有一个示例:
pyinstaller -F main.py --add-binary=`which redis-server`:bin
我不知道运行任意可执行文件的方法,但是您可以在应用程序中使用一些python代码来检测捆绑的时间,找到redis二进制文件并启动它。同样,您可以查看documentation以获取有关如何进行此操作的详细信息,但同样,请查看此示例的示例(可选的contextmanager优雅从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()