Мне нужно запустить скрипт внутри Popen внутри упакованного проекта (с pyinstaller). Команде НЕОБХОДИМО, чтобы она выполнялась в python3, и мне (очевидно) она должна быть переносимой, что означает, что я не могу полагаться на конфигурацию (нотацию python / python3), используемую на машине, которую я использовал для генерации пакета, ни где я его использую (я также не могу гарантировать, что в машине развертывания будет какой-либо питон ...).
У меня есть компьютеры, на которых Python уже является верной версией, и другие, где верной версией является python3. Я попытался вставить #! / Usr / bin python3 в начало файла, а затем запустить как python, но это не сработало.
subprocess.Popen(['python', 'internal.py', arg1, arg2], universal_newlines=True)
В незамерзающей среде я могу использовать sys.executable
вместо python
. Я попытался «pyinstall» для internal.py
, затем «pyinstall» для остальных, скопировав внутреннюю папку в новую папку и затем вызвав:
subprocess.Popen(['./internal/internal', arg1, arg2], universal_newlines=True)
Но это не работает ... В консоли (перемещение в большую папку проекта) это работает, но при запуске пакета это не ...
Есть идеи?
Ps. Я не могу просто импортировать скрипт как класс или что-то еще. Я не могу изменить переменные системного окружения (кроме тех, которые находятся внутри штуки pyinstaller ...)
Я видел кое-что о PyInstaller.compat, который имеет exec_python и __wrap_python, но я не смог его использовать. Я получаю ошибки при попытке запустить пакет из-за pkg_resources.DistributionNotFound: The 'PyInstaller' distribution was not found and is required by the application
, я пытался создать ловушку, чтобы добавить как скрытый импорт ... Ничего не сработало (но часть крючка, может быть, я ошибся ...)