2012-01-17 3 views
4

Я использую PyInstaller, чтобы превратить два скрипта в один исполняемый файл, один из которых вызывает другой. Меня вопрос, я не могу понять, как связать два сценария и до сих пор пусть они ссылаются друг на друга:Упаковка нескольких скриптов в PyInstaller

код, который вызывает проблемы в том, что один сценарий, script1.py содержит:

subprocess.call(['gksudo','python script2.py']) 

Это нормально работает, когда я запускаю сценарии в обычном режиме, но как только они упакованы в PyInstaller, я не знаю, как заставить вызов работать.

ответ

1

Я не думаю, что pyinstaller может справиться с этим комплектом на своем собственном устройстве, по крайней мере, мне не удалось его настроить, если это возможно. У меня также есть довольно большое приложение, в котором некоторые вызовы к

subprocess.Popen ('питона' ...)

сделаны. То, как я, наконец, сделал это работа:

  1. Изменить ваш подпроцесс вызовы на другой питон, как subprocess.call(['gksudo','./python script2.py']). Создать два отдельных анализа, один для точки входа, и один для остальных сценариев, в вашем случае:

    a1 - анализ script1.py a2 - анализ script2.py

  2. Создайте ехе только из точек входа скриптов:

    pyz = PYZ(a1.pure) 
    exe = EXE(pyz, 
        a1.scripts, 
        exclude_binaries=1, 
        name={name here}, 
        debug=False, 
        strip=False, 
        upx=True, 
        console=1) 
    
  3. отбираться из всех сценариев

    coll = COLLECT(exe, 
         a1.binaries, 
         a1.zipfiles, 
         a1.datas, 
         a2.binaries, 
         a2.zipfiles, 
         a2.datas, 
        python_tree, 
         *additional_trees, 
         strip=False, 
         upx=True, 
         name={}) 
    
  4. Скопируйте python в свой дистрибутив в местоположении, указанном во всех вызовах подпроцесса, с любыми дополнительными требованиями, которые не были найдены pyinstaller (у меня было несколько таких как matplotlib, pylab и т. Д.)

  5. Создайте стартовый скрипт, который сначала меняет любой требуемые переменные окружения, чтобы указать на ваш пакет, а затем запустите приложение. В моем случае, что было нужно, из вызывающего каталога:

    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 
    export LD_RUN_PATH=`pwd`:$LD_RUN_PATH 
    

Теперь все это было необходимо, если я хотел, чтобы приложение работало на машинах, которые либо не установлен питона, или если они установлен питон , убедитесь, что приложение по-прежнему использует все библиотеки из дистрибутива вместо локальных библиотек. Если в вашем случае python уже установлен на целевых компьютерах, я не думаю, что что-то вроде этого было бы необходимо, и было бы достаточно 3-х шагов.

Смежные вопросы