Python:导入子模块
我正在尝试建立一个具有以下结构的新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
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的应用程序。