【问题标题】:SQLAlchemy NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spannerSQLAlchemy NoSuchModuleError:无法加载插件:sqlalchemy.dialects:spanner
【发布时间】:2021-11-04 18:19:29
【问题描述】:

问题

我们正在尝试通过SQLAlchemy 版本1.3.23python-spanner-sqlalchemy 连接到Cloud Spanner。使用Poetry 进行依赖管理,sqlalchemy-spanner 已被添加(这就是项目的设置方式):

sqlalchemy = "~1.3"
sqlalchemy-spanner = { git="https://github.com/cloudspannerecosystem/python-spanner-sqlalchemy.git", tag="v0.1.0" }

create_engine 被调用时

create_engine("spanner:///projects/my-project/instances/my-instance/databases/my-db")

我收到以下错误

class 'sqlalchemy.exc.NoSuchModuleError'>", "NoSuchModuleError(\"Can't load plugin: sqlalchemy.dialects:spanner\")

尝试

注册表

我尝试添加(如 python-spanner-sqlalchemy test 包中的 conftest.py 文件所示)

from sqlalchemy.dialects import registry

registry.register("spanner", "google.cloud.sqlalchemy_spanner", "SpannerDialect")

在调用create_engine之前,会导致如下错误:

class 'ModuleNotFoundError'>", "ModuleNotFoundError(\"No module named 'google.cloud.sqlalchemy_spanner'\")

这让我觉得插件方言没有正确添加,因为在setup.py 的第 49 行中,为方言建立了连接:

entry_points={
    "sqlalchemy.dialects": [
        "spanner = google.cloud.sqlalchemy_spanner:SpannerDialect"
    ]
},

通过python setup.py install安装

在扳手项目的README 中,它说克隆存储库并通过python setup.py install 安装。我执行了这一步,但不确定如何将它导入我当前的项目或让我的项目知道这个库。我以前从来没有手动安装过python包,如果有人可以在这里提供任何帮助,我将不胜感激。

我做了什么尝试:

  • 按上述方式安装库
  • 尝试通过诗歌添加依赖项:poetry add sqlalchemy-spanner。得到Could not find a matching version of package sqlalchemy-spanner
  • 尝试通过 pip 定位库:pip install sqlalchemy-spanner== 通常会列出可用的包版本。

我不确定最后两个项目符号中的任何一个是否真的检查了本地安装的软件包。甚至不确定我在说什么。

更新

  • 因此,我能够使用 pip install /path/to/project 安装本地版本的 python-spanner-sqlalchemy,这可以正常工作,但在加载方言时仍然遇到同样的问题。
  • 我用from google.cloud.sqlalchemy_spanner import SpannerDialect 在上面的代码(在注册表部分)中添加了SpannerDialect 的导入。 PyCharm 为我自动完成了这项工作,这向我表明该软件包已成功安装并且可用。但是我在运行时收到了ModuleNotFoundErrorgoogle.cloud.sqlalchemy_spanner
  • 我在我的项目根目录中运行了python,并从repl 中导入了SpannerDialect,没有出现任何错误。

【问题讨论】:

    标签: sqlalchemy google-cloud-spanner


    【解决方案1】:

    我能够通过安装 sqlalchemy 来复制您看到的错误,但根本没有安装 sqlalchemy-spanner

    pip install sqlalchemy==1.3
    pip uninstall sqlalchemy-spanner
    
    >>> from sqlalchemy import create_engine
    >>> engine = create_engine(<url>)
    sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
    

    安装 sqlalchemy-spanner 后,我可以毫无问题地使用 SQLAlchemy:

    pip install git+git://github.com/googleapis/python-spanner-sqlalchemy.git@v0.1.0
    
    >>> from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, inspect
    >>> engine = create_engine(<url>)
    >>> metadata = MetaData(bind=engine)
    >>> table = Table(
    ...     "TestTable",
    ...     metadata,
    ...     Column("user_id", Integer, primary_key=True),
    ...     Column("user_name", String(16), nullable=False),
    ... )
    >>> table.create()
    >>> inspect(engine).get_table_names()
    ['TestTable']
    >>>
    

    基于此,我认为问题在于没有安装sqlalchemy-spanner。不幸的是,我不熟悉 Poetry 的依赖管理,所以我不确定到底出了什么问题。作为说明,我们最近将 repo 从cloudspannerecosystem/python-spanner-sqlalchemy 移至googleapis/python-spanner-sqlalchemy。我可以使用pip 命令,但也许Poetry 需要较新的命令?

    【讨论】:

    • 我尝试通过 pip 使用该 URL 进行安装,但我收到有关 CONTRIBUTING.mdcontributing.md 文件冲突问题的错误。 Poetry 也安装失败(带有一条晦涩的消息),我认为这是因为同样的问题?
    • 我同意Poetry 失败可能与pip 安装失败有关。您能否提供更多信息,例如您的pip 版本、操作系统以及您遇到的错误?如果这更容易,欢迎您在 python-spanner-sqlalchemy repo 上打开一个问题。
    • 我更改了新的 url,吹走了所有 docker 容器和图像,重新配置,它现在可以工作了。我认为在添加新的 url 依赖项后,我的 docker 映像没有被重建。
    猜你喜欢
    • 2016-02-21
    • 2019-04-16
    • 2019-03-28
    • 2023-01-17
    • 2019-07-29
    • 2019-04-29
    • 2020-03-27
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多