Автозагрузка файла python по указанному пути - PullRequest
0 голосов
/ 17 июня 2019

Рабочая ситуация

У меня есть файл hello.py с базовой функцией

def say_hello()
    print("hello world")
    return

И notebook.ipynb в том же каталоге (что делает "импорт "работа"

%load_ext autoreload
%autoreload 2
import hello

Затем каждый раз, когда я обновляю файл hello.py, автозагрузка работает:

hello.say_hello() 

Out >>>  "Hello world with autoreload working"



Проблемная ситуация

Когда файл hello.py не находится в том же каталоге, я не могу использовать "импорт", поэтому у меня есть:

%load_ext autoreload
%autoreload 2

from importlib.machinery import SourceFileLoader
hello = SourceFileLoader("hello", '/path/to/hello.py').load_module()

Сначала он работает:

hello.say_hello()

Out >>> "Hello world"

Но после того, как я отредактировал файл python:

def say_hello()
    print("hello world again")
    return

И повторно выполнил функцию, он возвращает предыдущую версию файла И выдает ошибку

hello.say_hello()

Out >>> "Hello world"

[autoreload of  failed: Traceback (most recent call last):
  File "C:\Program Files\Python36\Lib\site- 
packages\IPython\extensions\autoreload.py", line 244, in check
superreload(m, reload, self.old_objects)
 File "C:\Program Files\Python36\Lib\site-packages\IPython\extensions\autoreload.py", line 376, in superreload
    module = reload(module)
  File "C:\Program Files\Python36\Lib\imp.py", line 314, in reload
    return importlib.reload(module)
  File "C:\Program Files\Python36\Lib\importlib\__init__.py", line 166, in reload
    _bootstrap._exec(spec, module)
  File "<frozen importlib._bootstrap>", line 589, in _exec
AttributeError: 'NoneType' object has no attribute 'name'
]

Как выполнить автозагрузкуфайл Python по определенному пути из записной книжки Jupyter?

1 Ответ

0 голосов
/ 17 июня 2019

Это ImportError версия Python - 3.7.

У importlib.reload() поднять ImportError, если спецификация модуля не найдена.

...