2016-07-29 2 views
1

У меня есть ноутбук Jupyter с Python 3.5. Я использую его для анализа данных из симуляции, написанных на Python.Невозможно импортировать функцию Python в Jupyter

В первой камере, я запустить моделирование с

%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' 

моя программа разделяется между несколькими файлами. Когда я удаляю метод 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 

Единственной «причины» почему это может быть особенными по сравнению с другими функциями является то, что он использует панда.

Когда я запускаю скрипт control.py в PyCharm, он работает без проблем. Когда я запустить его из командной строки, я получаю

Ошибки при поиске спецификации для «control.py» (: модуля «контроль» не имеет атрибута «путь»)

Когда я оставляю функцию get_dataframe_from_results из моего кода, она работает в Jupyter.

Как я могу обойти эту ошибку в Jupyter и выполнить мою функцию?

версия сервера ноутбука является 4.1.0 и работает на:

Python 2.7.11 | Anaconda 4.0.0 (64-разрядной) | (По умолчанию, 16 Февраль 2016, 9:58:36) [MSC v.1500 64 бит (AMD64)]

Текущий Kernel Информация:

Python 3.5.1 | Anaconda 4.1.0 (64-разрядная версия) | (по умолчанию, 15 июня 2016, 15:29:36) [MSC v.1900 64 бит (AMD64)]

ответ

1

Эта проблема возникает, когда вы разрабатываете (редактируете) внешний код одновременно с разработкой Jupyter блокнот. Кэширование Jupyter не позволяет перезагрузить внешний файл после первого импорта.

Решение заключается в удалении внешнего каталога кэша python __pycache__, а затем перезапустить ноутбук Jupyter через пункт меню «Ядро -> Перезапуск и Очистить вывод». Выполнение обоих этих действий заставит Jupyter прочитать новую/новую копию внешнего файла, в результате узнав новые символы и другие модификации.

(Я понимаю, что ваш вопрос уже больше года. Но после того, как я сегодня борюсь с этим вопросом сегодня утром, я хотел получить зарегистрированный ответ для всех, кто сталкивается с этим.)

Смежные вопросы