python - 对 __init__.py 和导入感到困惑

标签 python

所以我有一个像这样的目录设置:

some_dir/
  foo/
    bar/
      test.py
  src/
    __init__.py
    data/
      __init__.py
      utils.py

我想从我的 test.py 模块导入 utils.py

import sys.path
sys.path.append("../../")
from src import data
data.utils // this throws an error AttributeError: module 'src.data' has no attribute 'utils'

但是当我这样做的时候:

import sys.path
sys.path.append("../../")
from src.data import utils 

一切正常,这是为什么?

最佳答案

a) from src.data import utils 将导入 utils.py,所以一切正常。

b) from src import data 只会导入数据包,不会导入utils.py,如果需要,需要添加显式导入data文件夹下的__init__.py,如下所示:

1) 如果需要同时支持python3 & python2:

__init__.py:

import src.data.utils # absolute import

或者:

__init__.py:

from . import utils # relative import

2)如果只是需要支持python2,就简单点:

__init__.py:

import utils

然后,当导入包时,该包下的__init__.py也会被执行。

关于python - 对 __init__.py 和导入感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52789904/

相关文章:

python - Django 缺少 Vary :Cookie header for cached views

python - 如何在python中检查xml标签值是否为none

python - 为什么我无法使用 pip 安装 kivy-garden/garden.matplotlib?

Python - Unicode 到 ASCII 的转换

python - 有没有一种简单的方法可以使 unicode 在 python 中工作?

python - 值错误 : arrays must all be same length - print dataframe to CSV

python - 如何获得2d的高斯核? (opencv)

python - 使用唯一索引创建 Pandas Dataframe

python - 从列表范围中获取随机项目

python - 安装 psycopg2 osx 10.12 python 3.5.2 - psycopg2 的构建轮失败