Russian Qt Forum
Май 02, 2024, 22:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [PythonQt] Проблема с загрузкой собственных модулей  (Прочитано 8385 раз)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« : Октябрь 01, 2013, 16:41 »

Всем привет.
Нуждаюсь в помощи. Использую PythonQt для решения одной задачи в программе. Чтобы ее решить своих модулей недостаточно и необходимо подключить сторонние. Поэтому пытаюсь их загрузить так:
Цитировать
PythonQt::init();
PythonQtObjectPtr mainModul = PythonQt::self()->getMainModule();
PythonQtImporter self;
PyObject *modul = PythonQtImport::getModuleCode(&self, "module", pathModule);
На что мне компилятор выдает:
Цитировать
ошибка: undefined reference to `PythonQtImport::getModuleCode(_PythonQtImporter*, char const*, QString&)'
Понятно дело не линкуется, но почему. Либы в проекте подключены:
Цитировать
win32:CONFIG(release, debug|release): LIBS += -LC:/PythonQt2.1_Qt4.8/lib/ -lPythonQt -lPythonQt_QtAll
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/PythonQt2.1_Qt4.8/lib/ -lPythonQt_d -lPythonQt_QtAll_d

include(C:/PythonQt2.1_Qt4.8/build/common.prf)
include(C:/PythonQt2.1_Qt4.8/build/PythonQt.prf)
include(C:/PythonQt2.1_Qt4.8/build/PythonQt_QtAll.prf)
Посмотрел как в примерах.

Собирал PythonQt как описано здесь
« Последнее редактирование: Октябрь 01, 2013, 16:46 от kolob » Записан

Qt 5.11.0, Win, MinGW
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Октябрь 02, 2013, 11:47 »

У меня тоже не линкуется. Попробуйте задать вопрос Флориану http://sourceforge.net/p/pythonqt/discussion/631393/.

Можно импортировать модули, используя PythonQt::importModule(). Для скриптов, включенных в файл ресурсов, имя начинается с ":".
Еще можно просто выполнить скрипт:
Код:
      mainModule.evalScript(QString("sys.path.append('%1')\n").arg(QDir::currentPath()));
      mainModule.evalScript("import eyed3tagger\n");
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #2 : Октябрь 21, 2013, 11:27 »

Еще вопрос.
Даже не знаю как его сформулировать.
Нужно использовать программу, которая вызывает py-скрипты на машине где не установлен интерпретатор Python? Вот как то так.
Записан

Qt 5.11.0, Win, MinGW
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Октябрь 21, 2013, 16:41 »

Нужно использовать программу, которая вызывает py-скрипты на машине где не установлен интерпретатор Python?
Не нужно Подмигивающий
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #4 : Октябрь 22, 2013, 04:16 »

Цитировать
Не нужно Подмигивающий

Как то не так написал. Понятное дело что в программе уже встроен интерпретатор. Это был не вопрос.
Я не знал как это сделать.
Ну вся запара была в пакетах, которые идут со стандартным Python (os, copy, abc и т.д.) Они были нужны для другого пакета, который работает с excel файлами.
Я решил эту проблему скопировав нужные пакеты, заархивировал и поместил в ресурсы, а там уже при исполнении программы распаковывал в директорию с исполняемой программой.
Записан

Qt 5.11.0, Win, MinGW
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #5 : Октябрь 22, 2013, 10:54 »

Цитировать
Не нужно Подмигивающий

Как то не так написал. Понятное дело что в программе уже встроен интерпретатор. Это был не вопрос.
Я не знал как это сделать.
Ну вся запара была в пакетах, которые идут со стандартным Python (os, copy, abc и т.д.) Они были нужны для другого пакета, который работает с excel файлами.
Я решил эту проблему скопировав нужные пакеты, заархивировал и поместил в ресурсы, а там уже при исполнении программы распаковывал в директорию с исполняемой программой.

Костыль, однако.
Предлагаю другое решение:
1. В папке с екзешником создаем директорию (к примеру) python
2. Копируем в нее из директории куда установлен Python папочки DLLs и Lib
3. В программе, сразу после инициализации PythonQt, добавляем следующий код:
Код:
    PythonQt::self()->addSysPath(QApplication::applicationDirPath() + "/python/DLLs");
    PythonQt::self()->addSysPath(QApplication::applicationDirPath() + "/python/Lib");
« Последнее редактирование: Октябрь 22, 2013, 10:56 от kai666_73 » Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #6 : Октябрь 23, 2013, 16:53 »

Костыль, однако.
Предлагаю другое решение:
1. В папке с екзешником создаем директорию (к примеру) python
2. Копируем в нее из директории куда установлен Python папочки DLLs и Lib
3. В программе, сразу после инициализации PythonQt, добавляем следующий код:
Код:
    PythonQt::self()->addSysPath(QApplication::applicationDirPath() + "/python/DLLs");
    PythonQt::self()->addSysPath(QApplication::applicationDirPath() + "/python/Lib");
Все это, я почти так и сделал. А архив с py-пакетами в ресурсах и дальнейшее их распаковка более надежнее.
А если какой либо нерадивый пользователь, удалит какой либо файл в этой директории или всю директорию.
А у меня при запуске проверялась эта папка на целостность и в случае чего заново извлекал в директорию все необходимые пакеты.
Записан

Qt 5.11.0, Win, MinGW
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #7 : Октябрь 24, 2013, 10:37 »

Ну да, наверно. По мне дак, - сие (защита от нерадивого пользователя) забота инсталлятора, а не установленной программы...
То бишь сломал что-то вредный пользователь, пускай переустанавливает.
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #8 : Октябрь 24, 2013, 13:05 »

Цитировать
То бишь сломал что-то вредный пользователь, пускай переустанавливает.
Согласен.
Но мне приходится распространять прогу в папке со всеми имеющимися dll. Поэтому так более удобнее.
Записан

Qt 5.11.0, Win, MinGW
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #9 : Октябрь 24, 2013, 13:39 »

Но мне приходится распространять прогу в папке со всеми имеющимися dll. Поэтому так более удобнее.

Так это же и есть полу-авто-копи-инсталлятор. Что мешает вложить в распространяемую папку директории со стандартными ПЫ-скриптами/либами Непонимающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.