Работа с внешним программным обеспечением не является целью Pyinstaller. Таким образом, вы должны справиться с этим самостоятельно, и это всегда зависит от зависимости. Что касается вашего вопроса, вам нужно сначала найти переносимую версию PostgreSQL, затем в вашем скрипте вам нужно запустить и настроить ее вручную. Например, в есть хорошая портативная версия .
Просто извлеките содержимое PGRE portable в каталог PostgreSQL
рядом с вашим скриптом Python (app.py
).
Затем вы можете использовать приведенный ниже код для запуска базы данных:
import subprocess
import os
import sys
PGRE_EXE = "PostgreSQL/PostgreSQLPortable.exe"
def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
def start_pgre():
pgre_path = os.path.join(resource_path("."), PGRE_EXE)
print(pgre_path)
p = subprocess.Popen(
[pgre_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print(stdout)
print(stderr)
if __name__ == "__main__":
start_pgre()
Затем добавьте все PostgreSQL
к данным, вы можете использовать ниже файл спецификации:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['app.py'],
pathex=['<path to your root project>'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += Tree('.\\PostgreSQL', prefix='PostgreSQL\\')
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='app',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
Наконец, используйте pyinstaller <app.spec>
для генерации вашего исполняемого файла.