无法在Jupyter

时间:2016-07-29 13:57:43

标签: python function import ipython jupyter

我有一个使用Python 3.5的Jupyter笔记本。我用它来分析模拟中的数据,我用Python编写。

在第一个单元格中,我使用

运行模拟
%run control.py

我收到了错误

> ImportError                               Traceback (most recent call
> last) ...\code\control.py in
> <module>()
>      15 from supplier import Supplier
>      16 from heatmap import create_heatmaps
> ---> 17 from write2csv import get_dataframe_from_results, write_raw_data_from_simulation, get_aggregated_lines_per_run
>      18 #write_aggregated_results,
>      19 
> 
> ImportError: cannot import name 'get_dataframe_from_results'

我的程序分为几个文件。当我删除方法&#39; get_dataframe_from_results&#39;从进口,它的工作原理。此方法与文件/模块write2csv中的其他几个一起使用。

我不明白为什么只能导入此方法。可以导入此文件中的所有其他功能,因此我排除了源文件夹位置的问题。

该功能本身并不包含任何异常:

def get_dataframe_from_results(all_aggr_results):
    # convert results to pandas data frame from nested dictionary
    results_df = pd.Panel(all_aggr_results)
    STRATS = ("AN", "RE")
    RLZ = ("NOR", "DIS")
    vlzlist = []
    for vlz in sorted(all_aggr_results):
        outerlist = []
        for rl in RLZ:
            concatlist = []
            for strt in STRATS:
                concatlist.append(pd.DataFrame.from_dict(results_df[vlz][strt][rl], orient="index"))
            outerlist.append(pd.concat(concatlist, keys=STRATS))
        vlzlist.append(pd.concat(outerlist, keys=RLZ))
    results = pd.concat(vlzlist, keys=sorted(all_aggr_results))
    results.index.names = ["A", "B", "C", "C"]
    results["totalcost"] = results["AAA"] + results["BBB"] + results["CCC"] + results["DDD"]
    results.reset_index(inplace=True)  # transform multiindex to columns

    return results

唯一的原因&#34;为什么它与其他函数相比可能是特殊的,它使用pandas。

当我在PyCharm中运行脚本control.py时,它没有问题。 当我从命令行运行它时,我得到了

  

查找&#39; control.py&#39;的规范时出错(:    模块&#39;控制&#39;没有属性&#39; 路径&#39;)

当我从代码中省略函数get_dataframe_from_results时,它在Jupyter中工作。

如何在Jupyter中解决此错误并拥有我的功能?

笔记本服务器的版本是4.1.0并且正在运行:

Python 2.7.11 | Anaconda 4.0.0(64位)| (默认,2016年2月16日,09:58:36)[MSC v.1500 64 bit(AMD64)]

当前内核信息:

Python 3.5.1 | Anaconda 4.1.0(64位)| (默认,2016年6月15日,15:29:36)[MSC v.1900 64 bit(AMD64)]

1 个答案:

答案 0 :(得分:3)

在开发Jupyter笔记本的同时开发(编辑)外部代码时会发生此问题。 Jupyter缓存使其无法在第一次导入后重新加载外部文件。

解决方案是删除外部python缓存目录__pycache__,然后通过菜单项&#34; Kernel - &gt;重新启动Jupyter笔记本。重启并清除输出&#34;。执行这两个操作将迫使Jupyter读取外部文件的新/新副本,从而识别新符号和其他修改。

(我知道你的问题已经超过一年了。但是在今天早上挣扎于这个问题之后,我想为其他遇到这个问题的人提供一个记录在案的答案。)