将redis服务器与pyinstaller捆绑在一起

时间:2018-01-16 10:27:39

标签: python redis pyinstaller

希望使用一个包含redis服务器来存储我的pyinstaller捆绑应用程序的特定于应用程序的数据 在动手实践之前,需要一些指导。

以下是要遵循的步骤吗? (1)捆绑redis-server可执行文件。并通过捆绑包中的一些脚本将其作为独立应用程序运行 (2)使用python中的redis客户端软件包连接到redis-server

我猜(2)肯定会奏效。但有没有简单的做法(1)。

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()