2016-03-07 293 views
2

注意:这是import from local directory on python2的重复。jupyter笔记本上导入失败

让我说的前期,对不起,因为我读过通进口规则蟒蛇,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在我的笔记本DIR它的工作原理使用以下启动细胞...(注:进口APP_CONFIG改变,而不py_lib ......我重新启动的内核,并清除重新运行前,所有输出)。当我执行py_lib.class1导入时,sys.path是相同的。为什么在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:后者启动,如果我救笔记本PY并通过Python运行失败。)

$ HOME /选择/ 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') 
+0

IPython应该对导入的工作方式没有任何影响。如果您运行坐在'〜/ opt/mynotebooks /'中的常规Python脚本,它会起作用吗?另外,你的描述说'.../class1.py#包含.py文件' - 这是否意味着你有一个名为'class1.py'的目录?还是只是复制粘贴? –

+0

一直在阅读...(忘了在哪里)在导入上似乎有IPython/python之间的区别......至少我已经观察到它。 TOP/py_lib是一个packagfe(有一个__init__.py),其中一个文件是class1.py,其中包含'class myclass(object):....' – frankr6591

+0

我没有将笔记本保存为.py文件...当我尝试运行带导入的.py文件时...'导入app_config不起作用。因此,我把它移到py_lib中,'import py_lib.app_config'作品......但现在笔记本电脑无法工作?因此,我的查询... – frankr6591

回答

1

我发现问题是import from local directory的重复。

具体而言,“用于Ubuntu 8.10的Python 2.5在解释器的sys.path中没有当前目录(空字符串)。”

不幸的是,我的应用程序仍然在py2上,所以我在py2上运行笔记本。我已经把AppNotebooks的样本。所以修复是迁移到py3。或者对于应用程序,将配置放入一个子包(即py_lib)中。