Пакетный сервер 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()