【问题标题】:Cannot import .py file to ipython notebook无法将 .py 文件导入 ipython 笔记本
【发布时间】:2014-06-11 18:35:58
【问题描述】:

对于“我无法让它工作”的问题提前道歉:我应该如何将.py 文件加载到 ipython 笔记本中?我想将 python 代码转换为笔记本(首先是简单的脚本,然后是包含 nbconvert 指令 embedded as comments 的脚本——参见链接文件的底部。)

也许我做错了,但也许我的设置有问题。当我将.py 文件拖到笔记本的文件列表时,我收到消息

文件类型无效:上传的笔记本必须是 .ipynb 文件。

我什至尝试将扩展名更改为.ipynb(保持python脚本不变);足够合理,我得到了一个错误:

加载笔记本时出错:请求错误

知道出了什么问题吗?

系统信息:我在 OS X(10.8,Mountain Lion)上,使用 Firefox 28.0 和 Anaconda 1.9.2 (x86_64),它提供 python 2.7.6 和 ipython 2.0。 Anaconda 不在默认 PATH 上;我将它添加到 bash 会话中,然后使用ipython notebook 启动笔记本,我可以在浏览器中正常打开和编辑.ipynb 文件。

但我确实得到了一些奇怪的行为: 当从笔记本导出.py 文件时,我没有得到here 记录的控制cmets,而是更简单的格式,没有版本号:

# coding: utf-8

# In[ ]:

print "This is a slide"

## Top-level title 

### Second-level heading 

#### Third-level heading

# This is some `markdown` text. 
# 
# And some more here.

知道这里发生了什么吗?

ipython nbconvert 生成相同的格式。但是,如果我使用 ipython notebook --script 启动笔记本服务器(每次保存时都会将笔记本导出为 python 脚本),结果包含我们需要转换回笔记本的 nbconvert 指令!

【问题讨论】:

  • @Cristian,这些问题是相关的,但它们不是重复的;这就是为什么我问他们两个。这个问题的答案是没有办法在 GUI 中做到这一点,这是另一个问题变得相关的唯一原因。
  • 好的,我撤回了我的近距离投票。

标签: ipython-notebook


【解决方案1】:

我不确定为什么 notebook 本身不支持此功能,但我得出的结论是:无法从命令行或 notebook GUI 完成。

<markdowncell> 这样的控制cmets 只能通过python 访问笔记本的API 来解释,如@CliffordVienna 在this answer 中对我的相关问题所示。

import IPython.nbformat.current as nbf
nb = nbf.read(open('test.py', 'r'), 'py')
nbf.write(nb, open('test.ipynb', 'w'), 'ipynb')

编辑:上述方法不适用于当前版本的 Notebook API (v4),所以我添加了this self-answer 来展示它是如何完成的。

【讨论】:

    【解决方案2】:

    如果你只需要导入一个本地文件,首先使用:

    sys.path.append(os.getcwd())

    将.pynb文件的目录放在sys.path中,然后导入本地文件。

    【讨论】:

    • 感谢您的帮助,但是您知道 ipython notebook 是什么吗? sys.path 与问题无关。
    • 其实是相关的。如果 python 文件位于不同的目录中,则需要使用 sys.path。对于您的特定情况,文件位于同一目录中,您不需要使用 sys.path。
    【解决方案3】:

    我遇到了同样的问题。 这篇文章有帮助: How to load/edit/run/save text files (.py) into an IPython notebook cell?

    基本上,我们只需要在单元格中使用以下命令。并且 .py 文件必须在同一目录中。

    %load filename.py
    

    【讨论】:

    • 谢谢,这是一个有用的功能,但不是我需要的。我已经解决了这个问题,我应该早点自己回答。
    猜你喜欢
    • 2017-02-03
    • 2018-07-02
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2014-09-14
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多