无法使用 __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/
目录。
我有两种情况需要将一些文件导入到主脚本中。
一个有效,另一个无效,我无法区分。
可行的方案
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/
目录。