我曾经在 PyQt4 应用程序的测试版阶段将 Python 嵌入其中,并仅在 Ipython 的 git 分支上工作。大约一年前我就没有再看过代码了,自那时以来有很多变化,似乎是在 Ipython 中有很多重构。目前我安装了 13.2 版本。
因此,我需要嵌入 Python 并使其存在于我的 PyQt4 应用程序中,以便可以使用来自我的 Python 应用程序的数据来更改内核的 user_ns。以下是以前针对 git 版本的 python 运行的代码:
因此,我需要嵌入 Python 并使其存在于我的 PyQt4 应用程序中,以便可以使用来自我的 Python 应用程序的数据来更改内核的 user_ns。以下是以前针对 git 版本的 python 运行的代码:
import sys
sys.path.insert(0, "../../ipython") #pickup ipython from git in a nonstd dir
from IPython.embedded.ipkernel import EmbeddedKernel
from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
from IPython.frontend.qt.embedded_kernelmanager import QtEmbeddedKernelManager
from IPython.lib import guisupport
from PyQt4.QtGui import QFrame,QHBoxLayout
from PyQt4.QtGui import QApplication
from collections import namedtuple
class IpythonEmbeddedWidget(QFrame):
def __init__(self):
QFrame.__init__(self)
self._layout = QHBoxLayout()
self._kernel = EmbeddedKernel()
self._kernel_manager = QtEmbeddedKernelManager(kernel = self._kernel)
self._kernel_manager.start_channels()
self._kernel.frontends.append(self._kernel_manager)
self._shell_widget = RichIPythonWidget()
app = guisupport.get_app_qt4()
self._shell_widget.exit_requested.connect(app.quit)
self._shell_widget.kernel_manager = self._kernel_manager
self._layout.addWidget(self._shell_widget)
self.setLayout(self._layout)
self._kernel.shell.run_cell("import nltk")
self._kernel.shell.run_cell("import sys")
self._kernel.shell.run_cell("sys.path.append('../ipython_scripts')")
self._kernel.shell.run_cell("cd ../ipython_scripts")
def set_shell_focus(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
iew = IpythonEmbeddedWidget()
iew.show()
app.exec_()
sys.exit()
那么,我需要改变什么才能使它与当前(13.2)版本的Ipython兼容?
编辑:
13.2版本没有inprocess-kernel功能。你仍然需要开发分支。我提出这个问题的原因不是因为我更新了我的开发分支,而是在我的电脑上更新QT/PyQt4导致现有代码出现问题。随后我更新了Ipython的开发版本,这要求我重构代码,因为API已经改变。