从这篇文章中:
Python: Disabling relative import
可以通过以下方式禁用相对导入:
from __future__ import absolute_import
然而,这条规则似乎不能扩展到Jupyter笔记本电脑。下面是一个快速的实验,当我创建一个与python包(在本例中是networkx)同名的python文件时。它会导致该包的所有绝对导入失败。以下是描述该案例的屏幕截图:
已安装的包“network”已包含子模块“drawing”,但导入失败,并显示以下消息:
^{pr2}$如何在Jupyter笔记本或Jupyter lab中修复它?这是否意味着我无法避免相对进口?在
更新:非常感谢您的回答,其中之一是建议我有一个损坏的Python路径(或搜索路径),不是这样,我添加了以下一行来显示PYTHONPATH和解析的模块路径不一致:
from __future__ import absolute_import
import os
import sys
for p in sys.path:
print(p)
print("=================")
import networkx
print(os.path.abspath(networkx.__file__))
from networkx import drawing
结果:
> /home/shared/anaconda3/lib/python36.zip
> /home/shared/anaconda3/lib/python3.6
> /home/shared/anaconda3/lib/python3.6/lib-dynload
> /home/peng/.local/lib/python3.6/site-packages
> /home/shared/anaconda3/lib/python3.6/site-packages
> /home/shared/anaconda3/lib/python3.6/site-packages/IPython/extensions
> /home/peng/.ipython
> ================= /home/peng/git/convnet-abstraction/slide/package/networkx.py
> --------------------------------------------------------------------------- ImportError Traceback (most recent call
> last) <ipython-input-4-d28ac292787c> in <module>
> 12 print(os.path.abspath(networkx.__file__))
> 13
> ---> 14 from networkx import drawing
>
> ImportError: cannot import name 'drawing'
下面是另一张截图:
相对进口与此无关。正在发生的是
sys.path
可能看起来像:当您键入}。它首先在你的“无标题文件夹”中找到一个。在
import networkx
时,它将依次遍历这些目录中的每一个,以查找{解决此问题的最佳方法是重命名文件,或将其放入子目录
mystuff/networkx
这不是一个好主意,但是您也可以
sys.path.remove('')
删除第一个条目。在相关问题 更多 >
编程相关推荐