Python:导入子模块

Python:导入子模块,python,python-3.x,Python,Python 3.x,我正在尝试建立一个具有以下结构的新Python项目: project: src: app1: main.py utils: __init__.py utils1: __init__.py utils1.py tests: 我想主要导入utils1 我从main.py尝试了以下操作,但无效: main.py from project.src.utils.ut

我正在尝试建立一个具有以下结构的新Python项目:

project:
   src:
      app1:
         main.py
      utils:
         __init__.py
         utils1:
            __init__.py
            utils1.py
   tests:
我想主要导入utils1

我从main.py尝试了以下操作,但无效:

main.py

from project.src.utils.utils1 import utils1
这表示以下错误:

(virtualenv)user: /home/user/project/src/app1 $ python main.py
   ImportError: No module named 'project'

如何在main中正确导入utils1?

项目目录中没有
\uuuu init\uuuu.py
,因此
project
不被识别为包。src目录也是如此

此外,您是从app1目录运行的,因此它上面的目录在pythonpath中不可见

将目录更改为
~/project/src
,将
utils
目录移动到
app1
,运行
/app1/main.py
导入app1.utils.utils1.utils1

最后:

您的布局应该如下所示:

project:
   src:
      app1:
         main.py
         utils:
            __init__.py
            utils1:
               __init__.py
               utils1.py
   tests:
执行为:

(virtualenv)user: /home/user/project/src $ python ./app1/main.py
和进口为:

from app1.utils.utils1 import utils1

首先,不要跳过导入(project.src.utils)中的
src
。其次,您可能需要将
project
src
转换为包(将
\uuuu init\uuuuuuuuuuupy
放在那里)。第三,我不确定顶级模块之外的相对导入是否有效,因此您可能需要将
project
放在python搜索路径中,在from utils.utils1 import utils1 import中,在main.py的开头没有名为“utils”的模块,请执行以下操作:导入系统;print sys.path-我们将查看它是否没有看到utils目录,或者您的文件layoutsys.path包含“/home/user/project/src/app1”错误“。所有其他文件夹都是虚拟环境中的系统文件夹。这很公平。编辑答案,我将稍微改变一下方法-我们将UTIL移到app1包中。看看它现在是否管用,管用。但我的愿望是在src中维护UTIL,因为我计划在这个项目中引入更多需要UTIL的应用程序。