2016-03-07 214 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)中。