我很难理解python导入程序是如何工作的。。 我有一个python脚本(分形维数.py)导入子模块(“绿色着色.py)使用:
from boxCovering.greedyColoring import *
当我直接打电话给它时,效果很好:
^{pr2}$当我将脚本移到一个文件夹并添加一个主脚本来导入分形维数.py因为现在boxCovering子模块的导入不起作用了。在
在主脚本中,我调用fractalDimension方法:
import fractality.fractalDimension as fd
fd.calculate()
但当我跑的时候
python main.py
我得到以下错误
Traceback (most recent call last):
File "main.py", line 5, in <module>
import fractality.fractalDimension as fd
File "fractalDimension.py", line 11, in <module>
from boxCovering.greedyColoring import *
ImportError: No module named 'boxCovering'
目录布局:
main.py
fractalDimension/
|
+-- __init__.py
+-- fractalDimension.py
+-- boxCovering/
|
+-- __init__.py
+-- greedyColoring.py
两个init文件都是空的
为什么python找不到boxCovering模块?在
这个错误是由于python正在搜索一个名为
PYTHONPATH
中的一个名为boxCovering
的顶级包,但是没有一个包存在(当前目录中只有一个sub-包,但不会搜索到这个包)。在如果要导入子包/子模块,则需要使用(n个显式)相对导入:
注意开头的
.
(点)。在或者使用绝对导入:
^{pr2}$在python2中,导入允许隐式相对导入,这正是您要做的。在这种情况下,导入:
以你现在的方式进行可能有两种不同的含义:
fractalDimension
包的子包boxCovering
boxCovering
在python3中(参见What's new?和相关的PEP 0328),他们认为这样的导入总是具有第二个意义。如果你想要一个相对的导入,你必须使用相对语法(在模块名的开头使用一个点)显式地声明。在
每个点表示转到上面的一个目录,因此
.
表示当前目录,..
表示父目录(在unix路径中)等您可以在python2上启用此语义,添加:
在你文件的顶端。在
相关问题 更多 >
编程相关推荐