__init__;py.py是否必须位于python应用程序的每个目录中?

__init__;py.py是否必须位于python应用程序的每个目录中?,python,python-2.7,flask,import,Python,Python 2.7,Flask,Import,\uuuu init\uuuuu.py用于将磁盘上的目录标记为Python包目录。假设我们有文件 py/src/__init__.py py/src/user.py 并且py位于您的路径上,您可以将user.py中的代码导入为: import src.module 或 如果我们删除\uuuu init\uuuuu.py文件,Python将不再在该目录中查找子模块,因此导入模块的尝试将失败 但是在我的应用程序中,\uuuuu init\uuuuuuuuuuuy.py不起作用 \uuuu ini

\uuuu init\uuuuu.py
用于将磁盘上的目录标记为Python包目录。假设我们有文件

py/src/__init__.py
py/src/user.py
并且py位于您的路径上,您可以将user.py中的代码导入为:

import src.module

如果我们删除
\uuuu init\uuuuu.py
文件,Python将不再在该目录中查找子模块,因此导入模块的尝试将失败

但是在我的应用程序中,
\uuuuu init\uuuuuuuuuuuy.py
不起作用

\uuuu init\uuuuu.py

__all__ = ['models', 'common']
from src.models.user import User    
from src.models.post import Post
from src.models.blog import Blog
当我运行python app.py时

错误:

Traceback (most recent call last):
  File "src/app.py", line 5, in <module>
    from src.models.user import User
ModuleNotFoundError: No module named 'src'

我遗漏了什么吗?

您没有首先导入
src

import src

__all__ = ['models', 'common']
from src.models.user import User
from src.models.post import Post
from src.models.blog import Blog
如果这是
src/\uuuu init\uuuu.py
,则可以使用相对导入:

from __future__ import absolute_import

from .models.user import User
from .models.post import Post
from .models.blog import Blog

这个问题的解决办法是。 1:首先要了解两件事,virtualenv的根目录和您的系统环境有区别。Virtualenv将您的项目目录设置为它的根目录。但以我的经验,如果您不使用Virtualenv,根目录将是您的系统目录。因此,在创建_init__py时,请记住,如果没有virtualenv或您没有导入任何内容,它可能为空

简单的初始化示例:

# in your __init__.py
from file import File

# now import File from package
from package import File
我的初始化.py

import src 
from src import *
from .models.user import User
from .models.post import Post
from .models.blog import Blog
在同一目录和子目录下的app.py或src/models/user.py中导入时,将不包括src:

from models.user import User 
from common.database import Database

未来是什么。是的,我也应该上传app.py文件吗
import src 
from src import *
from .models.user import User
from .models.post import Post
from .models.blog import Blog
from models.user import User 
from common.database import Database