首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jupyter-notebook上导入失败

在jupyter-notebook上导入失败
EN

Stack Overflow用户
提问于 2016-03-08 01:30:27
回答 1查看 1.4K关注 0票数 2

注意:这是import from local directory on python2的副本。

让我先说一句,很抱歉,我已经通读了python,ipython和jupython的导入规则,不能再保持它们的正确性了……

环境:

代码语言:javascript
复制
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包含以下启动单元:

代码语言:javascript
复制
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')

上面的单元格工作正常。

接下来,load py_lib.class1单元格执行工作...

代码语言:javascript
复制
from py_lib.class1 import myclass1

但上面给出了错误:“没有名为class1的模块”。

如果我将app_config.py移动到我的笔记本目录中,它可以使用下面的启动单元...(请注意,在没有py_lib的情况下导入app_config已更改...在重新运行之前,我重新启动内核并清除所有输出)。当我导入py_lib.class1时,sys.path是相同的。为什么当app_config下降1级时,它找不到它?说不通吗?

代码语言:javascript
复制
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')

(顺便说一下:如果我将notebook保存到py并通过python运行,则后一次启动将失败。)

$HOME/opt/mynotebook/nb_lib/app_config.py

代码语言:javascript
复制
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')
EN

回答 1

Stack Overflow用户

发布于 2016-03-09 00:55:20

我发现这个问题是import from local directory的复制品。

具体地说,“Ubuntu8.10的Python2.5for Ubuntu8.10在解释器的sys.path中没有当前目录(空字符串)”。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35850136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档