无法在 Jupyter 中导入 Python 函数

mon*_*ano 2 python import function ipython jupyter

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

在第一个单元格中,我运行模拟

%run control.py
Run Code Online (Sandbox Code Playgroud)

我得到了错误

> 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'
Run Code Online (Sandbox Code Playgroud)

我的程序被分成几个文件。当我从导入中删除方法“get_dataframe_from_results”时,它起作用了。此方法与文件/模块 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
Run Code Online (Sandbox Code Playgroud)

与其他函数相比,它之所以特殊的唯一“原因”是它使用了熊猫。

当我在 PyCharm 中运行脚本 control.py 时,它可以正常工作。当我从命令行运行它时,我得到

查找“control.py”规范时出错(:模块“control”没有属性“ path ”)

当我从代码中省略 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 位 (AMD64)]

当前内核信息:

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

Pat*_*lly 6

当您在开发 Jupyter Notebook 的同时开发(编辑)外部代码时,会出现此问题。Jupyter 缓存防止它在第一次导入后重新加载外部文件。

解决办法是删除外部python缓存目录__pycache__,然后通过菜单项“Kernel --> Restart and Clear Output”重启Jupyter notebook。执行这两项操作将迫使 Jupyter 读取外部文件的新副本,从而识别新符号和其他修改。

(我意识到你的问题已经有一年多了。但是在今天整个上午都在为这个问题苦苦挣扎之后,我想为遇到这个问题的其他人得到一个有记录的答案。)