Я не думаю, что pyinstaller может справиться с такого рода связыванием самостоятельно, по крайней мере мне не удалось настроить его, если это возможно. У меня также есть довольно большое приложение, где некоторые звонки на
subprocess.Popen ('python' ...)
сделано. Я наконец-то заставил это работать:
Измените ваши вызовы подпроцесса на другой питон, например subprocess.call(['gksudo','./python script2.py'])
. Создайте два отдельных анализа, один для точки входа и один для остальных сценариев, в вашем случае:
a1 - анализ script1.py
a2 - анализ script2.py
Создать exe-файл только из сценариев точки входа:
pyz = PYZ(a1.pure)
exe = EXE(pyz,
a1.scripts,
exclude_binaries=1,
name={name here},
debug=False,
strip=False,
upx=True,
console=1 )
Собрать из всех скриптов
coll = COLLECT( exe,
a1.binaries,
a1.zipfiles,
a1.datas,
a2.binaries,
a2.zipfiles,
a2.datas,
python_tree,
*additional_trees,
strip=False,
upx=True,
name={})
Скопируйте python в свой дистрибутив в местоположение, указанное во всех вызовах подпроцесса, с любыми дополнительными требованиями, которые не были найдены pyinstaller (у меня было несколько таких как matplotlib, pylab и т. Д.)
Создайте сценарий запуска, который сначала изменяет все необходимые переменные среды для указания на ваш пакет, а затем запускает приложение. В моем случае, то, что было нужно, было из каталога вызова:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
export LD_RUN_PATH=`pwd`:$LD_RUN_PATH
Теперь все это требовалось, если я хочу, чтобы приложение запускалось на машинах, на которых либо не установлен python, либо если на них установлен python, убедитесь, что приложение по-прежнему использует все библиотеки из дистрибутива вместо локальных библиотек. , Если в вашем случае python уже установлен на целевых машинах, я не думаю, что что-то подобное будет необходимо, и первых 3 шагов будет достаточно.