Некоторый контекст: REAPER - это цифровая звуковая рабочая станция, которая имеет расширенный API сценариев с привязками Lua, Python, C / C ++ и EEL.Я не нашел много информации о том, как он обрабатывает Python внутри.На первый взгляд, конфигурация включает указание на библиотеку Python где-нибудь в системе.Снимок экрана
Проблема: Я попытался запустить измененную версию скрипта PyQt4, найденную здесь внутри REAPER.Сначала он работал отлично
При последующих запусках того же сценария, однако, выскочила ошибка:
Traceback (most recent call last):
File "pyqt_test.py", line 2, in <module>
from PyQt4 import QtGui
RuntimeError: the sip module has already registered a module called PyQt4.QtCore
Перезапуск REAPER решает проблему для другого отдельного запуска сценария, прежде чем снова показывать ту же ошибку.
Поиск проблемы не помог.В списке рассылки PyQt есть одно сообщение , в котором упоминается ошибка, и что решение включало файл пакета __init__
, но никакой другой разработки.
Вот модифицированный скрипт, который я запускаю:
import sys
from PyQt4 import QtGui
def main():
sys.argv = [] # necessary because for some reason argv doesnt exist when the script is run inside REAPER
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
layout = QtGui.QGridLayout()
buttons = {}
for i in range(16):
for j in range(16):
# keep a reference to the buttons
buttons[i, j] = QtGui.QPushButton('row %d, col %d' % (i, j))
# add to the layout
layout.addWidget(buttons[i, j], i, j)
widget.setLayout(layout)
widget.show()
app.exit(app.exec_())
if __name__ == '__main__':
RPR_defer('main()') # RPR_defer runs supplied code in REAPER's GUI thread.
Есть идеи о том, что происходит и как его обойти / решить?