ПРИМЕЧАНИЕ: это дубликат import from local directory on python2.импорт не работает на jupyter-notebook
Позвольте мне сказать заранее, извините, как я прочитал через правила импорта для питона, IPython и jupython и не может держать их прямо больше ...
Окружающая среда:
ubuntu linux server with jupyterhub
jupyter home is $HOME/opt
$HOME/opt/mynotebooks # contains my .pynb notebooks
$HOME/opt/mynotebooks/py_lib # contains .py files
$HOME/opt/mynotebooks/py_lib/app_config.py # myapp config/links to myapp
$HOME/opt/mynotebooks/py_lib/class1.py # contains .py files
/opt/myapp/src/app # contains my app .py classes
/opt/myapp/src/app/appclass.py # contains appclass
Мои notebook1.pynb содержит следующую стартовую ячейку:
import os, sys
MY_NOTEBOOK = os.path.join(os.getenv('HOME'),'opt','mynotebooks')
# add my notebook to ipython path
os.chdir(MY_NOTEBOOK)
sys.path.append(MY_NOTEBOOK)
import py_lib.app_config
print(os.getenv('MYAPP_STORE')
Вышеупомянутая ячейка работает нормально.
Далее py_lib.class1 тензодатчик сделать работу ...
from py_lib.class1 import myclass1
Но выше дает ошибку: «Нет модуля с именем Class1».
Если я перемещаю app_config.py в свой блокнот для ноутбука, он использует следующую ячейку запуска ... (ПРИМЕЧАНИЕ. Import import app_config изменен без py_lib ... Я перезапускаю ядро и очищаю все выходные данные перед повторным запуском). Sys.path тот же, когда я импортирую py_lib.class1. Почему он не может найти его, когда app_config на 1 уровень вниз? Без разницы?
import os, sys
MY_NOTEBOOK = os.path.join(os.getenv('HOME'),'opt','mynotebooks')
# add my notebook to ipython path
os.chdir(MY_NOTEBOOK)
sys.path.append(MY_NOTEBOOK)
import app_config
print(os.getenv('MYAPP_STORE')
(BTW: этот последний запуск терпит неудачу, если я сохранить ноутбук на ру и запустить с помощью питона.)
$ HOME/Opt/mynotebooks/nb_lib/app_config.py
APP_SITE = os.path.join('/opt/myapp/src')
APP_STORE = os.path.join('/opt/myapp/store')
os.environ['APP_SITE'] = APP_SITE
os.environ['APP_STORE'] = APP_STORE
# Link to APP_SITE
os.chdir(APP_SITE)
sys.path.append(APP_SITE)
APP_UPLOAD = os.path.join(APP_STORE,'upload')
IPython не должен иметь никакого значения, как работает импорт. Это работает, если вы запускаете обычный скрипт Python, сидящий в '~/opt/mynotebooks /'? Кроме того, в вашем описании указано, что '.../class1.py # содержит .py файлы' - означает ли это, что у вас есть каталог с именем' class1.py'? Или это просто скопировано? –
Чтение ... (забыл, где), похоже, существует разница между IPython/python при импорте ... по крайней мере, я это наблюдал. TOP/py_lib - это packagfe (имеет __init__.py), а один из файлов - class1.py, содержащий класс myclass (object): .... ' – frankr6591
Я сохранил ноутбук как файл .py ... и когда я пытаюсь запустить файл .py с импортом ... «import app_config не работает. Таким образом, я переместил его в py_lib и «import py_lib.app_config» работает ... но теперь ноутбук не работает? Таким образом, мой запрос ... – frankr6591