Пакетный сервер Redis с pyinstaller

Нужно использовать сервер Redis для хранения данных, относящихся к конкретному приложению, с моим приложением pyinstaller.
Прежде чем приступить к работе, нужно некоторое руководство.

Это шаги для этого?
(1) Пакет исполняемого файла Redis-сервера. И запустите его как отдельное приложение через какой-нибудь скрипт в моем комплекте.
(2) Используйте пакеты клиента Redis в Python для подключения к серверу Redis

Я думаю (2), безусловно, должно работать. Но есть ли простой способ сделать (1).

1 ответ

Вы можете связать произвольные двоичные файлы с --add-binary опция в командной строке или binaries аргумент Analysis позвоните в ваш .spec файл. Проверьте руководство для деталей, но один пример:

pyinstaller -F main.py --add-binary=`which redis-server`:bin

Я не знаю, как запустить произвольные исполняемые файлы, но вы могли бы иметь в своем приложении некоторый код на python, чтобы определить, когда вы связаны, найти двоичный файл redis и запустить его. Опять же, вы можете проверить документацию для получения подробной информации о том, как это сделать, но, опять же, пример того, как это может выглядеть (необязательная элегантность contextmanager, украденная из другого ответа):

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()
Другие вопросы по тегам