简体   繁体   中英

import fails on jupyter-notebook

NOTE: this is a duplicate of import from local directory on python2 .

Let me say upfront, sorry as I've read thru the import rules for python, ipython and jupython and can't keep them straight anymore...

Environment:

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

My notebook1.pynb contains the following start-up cell :

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

The above cell works ok.

Next, the load py_lib.class1 cell to do work...

from py_lib.class1 import myclass1

But the above gives error: "No module named class1".

If I move the app_config.py into my notebook dir it works use the following start-up cell...(NOTE import app_config changed without py_lib... I restart kernel and clear all output before re-running). The sys.path is the same when I do the py_lib.class1 import. Why can't it find it when app_config is 1 level down? Makes no sense?

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: this latter startup fails if I save notebook to py and run via python.)

$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')

I found the issue to be a duplicate of import from local directory .

Specifically, "Python 2.5 for Ubuntu 8.10 does not have the current directory (empty string) in sys.path for the interpreter."

Unfortunately, my app is still on py2 so I run the notebook on py2. I have put a sample of the AppNotebooks . So fix is to migrate to py3. Or for app, put config into a sub package (ie. py_lib).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM