我的文件结构如下:
root/
v1/
__init__.py
example_1.py
script/
__init__.py
classification.py
prediction.py
example2.py
分类看起来像这样:
#classification.py
print(__name__)
from .prediction import predict_func
def func1():
predict_func()
对于example1.py看起来像这样
#example1.py
from script.classification import func1
func1()
但从example2.py导入分类,如下所示将失败
#example2.py
from classification import func1
func1()
因为分类中的example2.py场景__name__
只是classification
而不是script.classification
作为example1.py,因此这里没有父节点,因此导入模块失败。
我知道解决方案之一是在example1.py和exaple2.py中都将脚本目录添加到sys.path,并在分类中使用from prediction import predict_func
。可以同时在example1.py和example2.py中使用,但这是一个好方法,还有其他替代方法吗?
答案 0 :(得分:0)
由于example_1.py
在root
目录中,因此我认为root
是项目的源根。因此,该目录必须出现在Python路径中,即:sys.path
。
而且,root
下的每个目录应该是一个Python包。因此,script
必须有一个__init__.py
文件(通常为空)。
您应该看一下有关Modules的Python官方教程。
修改
在下面的第二个示例中,您尝试导入分类,就像它是根软件包一样,而不是它。
# example2.py
from classification import func1
func1()
要解决此问题,您需要使用相对导入或完整的软件包名称:
# example2.py
from script.classification import func1
func1()
当然,要运行您的示例,您需要执行以下操作:
python -m script.example2