当 Python 处于 beta 阶段时,我将 Python 嵌入到 PyQt4 应用程序中,并且只在 Ipython 的 git 分支上工作。我已经有一年左右没有看代码了,从那以后发生了很多变化——在 Ipython 中似乎进行了很多重构。我目前安装了 13.2
因此,我需要嵌入 Python,并且我需要它存在于我的 PyQt4 应用程序中,这样我就可以user_ns
使用来自我的 Python 应用程序的数据来更改内核。用于从 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 没有进程内内核功能。您仍然需要开发分支。驱使我问这个问题的不是我更新了我的开发分支,而是更新我机器上的 QT/PyQt4 使现有代码中断。我随后更新了 Ipython 开发版本,该版本要求我在 API 发生变化时重构我的代码。