无法使用 __init__.py 创建模块

Can't create a Module with __init__.py

我有两种情况需要将一些文件导入到主脚本中。
一个有效,另一个无效,我无法区分。

可行的方案

main.py    
models  
├── __init__.py   
├── vggs.py  
├── resnets.py  

其中 __init__.py

from .vggs import *
from .resnets import *

main.py

from models import *   # works fine

不适用的场景

scripts
├── main.py    
models  
├── __init__.py   
├── vggs.py  
├── resnets.py  

这一次,我将模型文件夹附加到 main.py 中的 sys.path

sys.path.append('../models')

# These don't work --> ModuleNotFoundError: No module name models
import models   
from models import * 

# However, these work
from vggs import *
from resnets import *

为什么我可以导入每个文件,但我不能将整个模型文件夹作为一个模块导入,即使我有 __init__.py

您已将 models 目录本身添加到 sys.path 列表中。现在 Python 在该目录的 中查找模块 。没有 ../models/models/__init__.py 也没有 ../models/models.py,所以 import models 失败。

parent 目录添加到 sys.path():

sys.path.append('..')

Python 然后找到 ../models/__init__.py 所以 import models 然后成功。

更强大的版本首先确定 script/ 目录的绝对路径,然后将父路径添加到 sys:

import os.path

scripts_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(scripts_dir))

否则,..是相对于当前工作目录的,不一定是scripts/目录。