首页 > 解决方案 > 为什么 Python 3.x 找不到我的导入?(相对或绝对)

问题描述

我将用我继承了这段代码并且仍在学习 Python 的导入这一事实作为开头。我尝试添加相对路径、绝对路径,并开始将文件夹附加到我的 sys 路径(我了解到这样做非常糟糕)。似乎每个人在 Python 中成功声明路径的方式和我声明路径的方式都不一致,当我问大多数人时告诉我“好吧,它只是工作”或者他们不确定为什么我的导入不起作用。因此,尽管没有必要回答这个问题,但任何关于最佳实践的讨论都会受到赞赏。

这个应用程序显然应该在没有任何编辑的情况下工作。我有一个 docker 容器,其文件夹结构如下:

     - app
        - sim
           - __init__.py
           - notebook.ipynb
        - src
           - __init__.py
           - model.py
           - factory.py
           - utils.py

notebook中,我尝试model.py使用以下方法导入一个函数:

sys.path.append("../")
sys.path.append("../src")
from src.model import some_fcn

这会引发错误:module 'src' has no attribute 'utils'因为src.utilsimports factory. 完整跟踪:

<ipython-input-2-a807>
---> 14 from model import some_fcn

/app/src/model.py in <module>
     11 import copy
     12 
---> 13 import src.utils as utils

/app/src/utils.py in <module>
     14 import scipy
---> 15 import src.factory
     17 import src.model as model

/app/src/factory.py in <module>
      7 import numpy as np
----> 8 import src.utils as utils
      9 

值得注意的是,原来的笔记本有

sys.path.append("../") 
from model import some_fcn

而且我不知道这过去是如何工作的,因为找不到 model.py !诡异的。

总之,嵌套导入会导致错误。这不是我第一次遇到这些嵌套导入问题,我不知道如何解决它们,如果它是我的 docker 的问题,或者是我的设置的问题。项目是否需要重组?这是如何工作的?我怎样才能让它工作?我正在积极尝试避免对他们的代码进行编辑,但这已成为经常发生的事情,我不确定我做错了什么。

标签: pythonimport

解决方案


推荐阅读