Подтвердить что ты не робот

PyInstaller, изменяющий местоположение dll и pyd

Я пытаюсь использовать pyInstaller для упаковки приложения wxpython. Я ищу вариацию режима "одна папка", в которой dll и pyds не хранятся в каталоге верхнего уровня, а в подкаталоге (например, "dlls" или "libs" ).

В настоящий момент это файл спецификации:

# -*- mode: python -*-
import os

a = Analysis\
(
    ["..\\job_scraper\\load_gui.py"],
    pathex        = ["C:\\Users\\Administrator\\Documents\\Projects\\python\\PyInstaller\\load_gui"],
    hiddenimports = [],
    hookspath     = None,
    runtime_hooks = None
)

a_binaries = []
for (name, path, data_type) in a.binaries:
    (non_ext, ext) = os.path.splitext(name)
    if(ext in [".pyd", ".dll"]):
        a_binaries.append((os.path.join("libs", name), path, data_type))
    else:
        a_binaries.append((name, path, data_type))

a.binaries = TOC(a_binaries)

pyz = PYZ(a.pure)

exe = EXE\
(
    pyz,
    a.scripts,
    exclude_binaries = True,
    name             = "load_gui.exe",
    debug            = False,
    strip            = None,
    upx              = True,
    console          = False
)

coll = COLLECT\
(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    [("control.csv", "..\\job_scraper\\control.csv", "DATA")],
    strip = None,
    upx   = True,
    name  = "load_gui"
)

Это означает, что dll (а не pyds) в папку lib, однако, похоже, делает это после ссылки, поэтому программа не запускается, потому что она не может найти ожидаемые DLL.

4b9b3361

Ответ 1

другой способ, новый loadmyapp.c:

#include<stdlib.h>
main(int argc,char *argv[]) {
    execv("yourapp/app.exe", argv);
}

gcc -o loadmyapp loadmyapp.c

./loadmyapp