【问题标题】:How to import Great Expectations custom datasource ValueError: no package specified for (required for relative module names)如何导入 Great Expectations 自定义数据源 ValueError: no package specified for (required for relative module names)
【发布时间】:2021-06-22 09:44:01
【问题描述】:

我的 Great Expectations 项目有这个文件夹结构:

great_expectations/
    dataset/
        __init__.py
        oracle_dataset.py
    datasource/
        __init__.py
        oracle_datasource.py
    great_expectations.yml

datasource/__init__.py:

from .oracle_datasource import OracleDatasource

dataset/__init__.py:

from .oracle_dataset import OracleDataset

great_expectations.yml:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: .dataset
    class_name: OracleDatasource
    module_name: .datasource

除了 python 相对导入让我非常困惑之外,我也不确定在运行 great_expectations 命令时使用哪个参考目录。当我尝试时:great_expectations suite new 我收到错误消息:ValueError: no package specified for '.datasource' (required for relative module names)

我认为上面的 .yml 仍然是在尝试了下面的所有内容之后要走的路。我猜我对需要在 init 或其他地方处理的相对导入有一些不明白的地方。

编辑:我也试过了:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: great_expectations.dataset
    class_name: OracleDatasource
    module_name: great_expectations.datasource

The module: 'great_expectations.datasource' does not contain the class: 'OracleDatasource'.

我认为此消息表示它正在查找 great_expectations 库,我通过尝试包含在库中的类名来确认这一点。

还有这个:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: dataset
    class_name: OracleDatasource
    module_name: datasource

No module named "datasource" could be found in the repository. Please make sure that the file, corresponding to this package and module, exists and that dynamic loading of code modules, templates, and assets is supported in your execution environment. This error is unrecoverable.

我认为这意味着它正在查找库之外但找不到文件。

还有这个:

datasources:
  db_name:
    credentials: ${db_name}
    data_asset_type:
      class_name: OracleDataset
      module_name: dataset.oracle_dataset
    class_name: OracleDatasource
    module_name: datasource.oracle_datasource

No module named "datasource.oracle_datasource" could be found in the repository. Please make sure that the file, corresponding to this package and module, exists and that dynamic loading of code modules, templates, and assets is supported in your execution environment. This error is unrecoverable.

我认为这意味着它正在查找库之外但找不到文件。

【问题讨论】:

    标签: python great-expectations


    【解决方案1】:

    要扩展 Great Expectations,请在您的项目中使用 /plugins 目录(此文件夹在您运行 great_expectations init 时自动创建)。此处添加的模块可以在您的配置中引用。

    将 oracle_datasource.py 和 oracle_dataset.py 添加到插件文件夹:

    .
    ├── custom_data_docs
    │   ├── renderers
    │   ├── styles
    │   │   └── data_docs_custom_styles.css
    │   └── views
    ├── oracle_dataset.py
    └── oracle_datasource.py
    

    在 great_expectations.yml 中编辑您的 yaml,如下所示(请注意,我们处理与此文件夹相关的模块名称,因此如果您的新模块位于 plugins 文件夹的根目录,则不需要点路径):

    datasources:
      db_name:
        credentials: ${db_name}
        data_asset_type:
          class_name: OracleDataset
          module_name: oracle_dataset
        class_name: OracleDatasource
        module_name: oracle_datasource
    

    最后一件事 - 如果您愿意将 Oracle 数据源和数据集贡献回主程序包,我相信 Great Expectations 社区会很乐意拥有它! https://docs.greatexpectations.io/en/latest/contributing.html

    【讨论】:

    • 是的,当我尝试这个时,它似乎在实际的 great_expectations 库中查找:The module: 'great_expectations.datasource' does not contain the class: 'OracleDatasource'.
    • 很抱歉 - 这对于扩展 Great Expectations 是不正确的,我会尽快使用 plugins/ 目录将其编辑为更好的答案。
    • @PierreDelecto - 我希望这会有所帮助!如果是,请将此问题标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2021-05-22
    • 2021-07-04
    • 2021-11-14
    • 2012-12-21
    • 2021-02-18
    • 2020-07-19
    • 2015-02-27
    相关资源
    最近更新 更多