如何将类路径传递给ipython';从ipzope呼叫时,是谁的笔记本?

如何将类路径传递给ipython';从ipzope呼叫时,是谁的笔记本?,python,ipython-notebook,buildout,Python,Ipython Notebook,Buildout,我已经使用iypthon作为ipzope(buildout)中的设置有一段时间了,它可以正常工作 现在我试图使用ipython的笔记本,但我无法正确设置它 当我创建一个新笔记本时,它会用一个ImportError(见下文)停止IPython的内核。 我猜IPython.html.notebook.start()中创建的线程会打开webbrowser,而不会从调用进程传递sys.path 我的解决方法是将ipzope中的路径添加到PYTHONPATH 当我添加所有路径时,ipython的笔记本工作

我已经使用iypthon作为ipzope(buildout)中的设置有一段时间了,它可以正常工作

现在我试图使用ipython的笔记本,但我无法正确设置它

当我创建一个新笔记本时,它会用一个
ImportError
(见下文)停止IPython的内核。 我猜
IPython.html.notebook.start()
中创建的线程会打开
webbrowser
,而不会从调用进程传递
sys.path

我的解决方法是将
ipzope
中的路径添加到
PYTHONPATH

当我添加所有路径时,ipython的笔记本工作得非常好,我可以调试和操作Plone

如果我只将
ipython
pyzmq
Jinja
tornado
添加到
PYTHONPATH
ipython的笔记本上,但它无法访问
ipzope
变量(
app
utils
等)

问题:有没有提示如何在不使用
PYTHONPATH的情况下将路径传递到ipython的笔记本

我从
ipzope
开始使用

sys.argv[1:1] = "notebook --ip=192.168.45.135 --profile=zope".split()
最重要的是:

IPython Notebook 14-03-22 14:57:17.141 [NotebookApp] Connecting to: tcp://127.0.0.1:50948
2014-03-22 14:57:17.143 [NotebookApp] Kernel started: b573fbc0-5dee-410b-91cb-01afd2e9acce
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named IPython.kernel.zmq.kernelapp
IPython笔记本14-03-22 14:57:17.141[NotebookApp]连接到:tcp://127.0.0.1:50948
2014-03-22 14:57:17.143[NotebookApp]内核已启动:b573fbc0-5dee-410b-91cb-01afd2e9acce
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为IPython.kernel.zmq.kernelapp的模块

我引述
Min RK

“当您启动普通终端IPython时,将在 相同的进程。这意味着IPython在与相同的上下文中执行 您对sys.path所做的更改,因此这些更改具有所需的效果 在笔记本中,只有笔记本服务器存在于其中 内核作为子进程启动,从而重新创建 sys.path,遵循Python的标准过程 进程,并且不继承任何可能会导致错误的对sys.path的运行时更改 已在父进程中发生。” ()

我的解决方案 因此,将路径传递到笔记本的唯一方法是通过
PYTHONPATH

我现在的解决方法是在脚本中设置
os.environ['PYTHONPATH']=':'.join(sys.path)
。这样,您就不需要弄乱系统的PYTHONPATH(如果有的话),并且确保所有必要的路径都将传递到内核

os.environ
作为
Popen
env
参数传递给
launch_kernel
中的子进程(
../ipython-1.2.1-py2.7.egg/ipython/kernel/launcher.py

如果需要使用ipython的笔记本并希望buildout生成脚本,请将以下内容添加到您的buildout中(例如在
../Plone-4.3.2/zeocluster/develope.cfg

parts +=
...
    ipzopenb
...
[ipzopenb]
recipe = zc.recipe.egg
eggs =
    ipython
    pyzmq
    tornado
    Jinja2
#following for nbconvert
    Pygments
    Sphinx
    ${client2:eggs}
initialization =
    import sys, os
    os.environ["INSTANCE_HOME"] = "${client2:location}"
    os.environ['PYTHONPATH'] = ':'.join(sys.path)
    sys.argv[1:1] = "notebook --ip=192.168.45.135 --profile=zope".split()
scripts = ipython=ipzopenb
...
[versions]
Jinja2 = 2.7.2
Pygments = 1.6
Sphinx = 1.2.2