python - 使用 pyinstaller 捆绑 redis 服务器

标签 python redis pyinstaller

希望在我的 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/

相关文章:

python - 在 Python 中同时检索 CSV 字段和文件中的原始字符串

python - Pyinstaller onedir选项-目录外的exe文件

python - 如何在 python 脚本中运行 linux (ubuntu) 命令?

python - 尝试搜索 EPG XML 数据

python - 用pyshark统计包数

laravel - 在生产环境中如何在Laravel 6中管理队列?

redis - 如何顺利地在 Redis 中刷新数据库?

php - 带有 nodejs php 和 mysql 的安全 websocket

pyqt4 - 为什么我的 pyinstaller 创建的可执行文件需要管理员权限?

python - 使用 pyinstaller 分发我的 TKinter 应用程序不起作用