LINUX.ORG.RU

Python, сборка из модулей


0

1

Друзья, помогите с решением следующей проблемы. Есть программа 1 (все с использованием PyQt), которая выполняет некоторое необходимое действие, эта программа так же должна обновляться. Я написал программу 2, которая делает следующее: она конектится к серверу и узнает последнюю версию программы 1, если доступна новая версия то она ее выкачивает и запускает новую версию, иначе запускает существующую. И 1 и 2 программы по отдельности запускаются, собраны в один exe файл через PyInstaller под Windows7 (т.е. Программа1.exe и Программа2.exe). В программе 2 я используя модуль subprocess (call) пытаюсь запустить программу 1. В линуксе эта связка работает на ура, однако когда я сделал сборку через PyInstaller для Windows, то запускаться программа 1 перестала из под программы 2. ошибка следующая:

No module, named PyQt4.QtCore
Эта ошибка вылезает только при запуске из под subprocess.call. По отдельности все грузится и работает норм. Гугл не помог, я нашел что импорт модулей должен производится через «from PyQt4 import QtCore...» сделал две тестовые программы у меня таже самая проблема((( А возможно это не есть самый хороший путь. Может кто наставит на путь истинный? Как вообще правильно эту схему реализовать на Python

Как вообще правильно эту схему реализовать на Python

Зачем один исполняемый файл? Модуль не находится из-за неправильных переменных окружения, но как работает PyInstaller неизвестно. Приноси с собой cpython и запускай из под него скрипты. Та же Enterprise версия Zenoss приносит с собой python со всеми модулями.

xpahos ★★★★★
()

PyInstaller не положил в .exe библиотеки qt? Наверняка при сборке можно явно указать зависимости. В py2exe было можно.

anonymous
()
Ответ на: комментарий от anonymous

И да, py2exe делал целый каталог с .exe, .pyd и .dll. В один установщик я собирал это другой программой.

anonymous
()

1) найдите где там у Вас валяется под виндой этот самый модуль, и там где его импортируете прописывайте путь к нему (можно относительный) в sys.path

2) я ниасилил py2exe, просто клал ручками в архив питон со всеми делами и делал батничек для запуска - это самое простое.

AIv ★★★★★
()
Ответ на: комментарий от AIv

главное требование, это иметь один исполняемый файл и ничего больше... Клиенты не будут устанавливать ни PyQt ни сам Python, необходимо чтобы они могли выкачать программу1, и запустить ее, а она сама взяла бы и выкачала программу 2 и запускала ее всегда из под себя

energyclab
() автор топика
Ответ на: комментарий от energyclab

А им и не надо ничего устанавливать. Кладете все что нужно в архив, юзер распаковывает архив и запускает оттуда батник.

AIv ★★★★★
()
Ответ на: комментарий от energyclab

тогда стоит проверить эти переменные окружения. запускать не программу 2, а бат файл следующего вида:

set
pause
и сравнить результат с простым запуском бат файла

anonymous
()
Ответ на: комментарий от anonymous

А что это может дать? я смог запустить вторую программу, но только если exe собран с параметром shell=True, в этом случае все работает нормально, единственное на заднем плане светится консоль, чего не хотелось бы видеть...А если shell=False то не запускается, выбрасывает exception при вызове subprocess.call

energyclab
() автор топика
Ответ на: комментарий от energyclab

модуль не находится из-за неправильных переменных окружения

при помощи того bat файла можно эти переменные окружения сравнить.

anonymous
()
Ответ на: комментарий от anonymous

Я с переменными разобрался, я их взял окружения первой программы через модуль os и передал этот dict в параметре env subprocess.Popen, все хорошо зароботало, проблема только в том, что это работает если в сборке shell=True. А мне не нужна консоль открытая постоянно, я просто хочу запустить один PyQt.exe из под другого

energyclab
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.