导入处理/模块从 python2 更改为 python3?

2023-11-22

我试图遵循中所示的设计模式上一个问题与 SQLAlchemy 相关,旨在跨多个文件共享公共 Base 实例。代码与 python2 和 python3 完全相同。

但是,当我在模块(称为 model)中移动文件 a.py、b.py、c.py 和 base.py 并添加必要的 __init__.py 文件时,它继续在 python2 上工作,但随后产生错误在 python3 上(详细信息如下)。

我有以下文件:

模型/base.py

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

模型/a.py

from sqlalchemy import *
from base import Base
from sqlalchemy.orm import relationship

class A(Base):
    __tablename__ = "A"
    id  = Column(Integer, primary_key=True)
    Bs  = relationship("B", backref="A.id")
    Cs  = relationship("C", backref="A.id")

模型/b.py

from sqlalchemy import *
from base import Base

class B(Base):
    __tablename__ = "B"
    id    = Column(Integer, primary_key=True)
    A_id  = Column(Integer, ForeignKey("A.id"))

模型/c.py

from sqlalchemy import *
from base import Base

class C(Base):
    __tablename__ = "C"    
    id    = Column(Integer, primary_key=True)
    A_id  = Column(Integer, ForeignKey("A.id"))

模型/__init__.py

(empty)

main.py

from sqlalchemy import create_engine
from sqlalchemy.orm import relationship, backref, sessionmaker

from model import base


from model import a
from model import b
from model import c

engine = create_engine("sqlite:///:memory:")
base.Base.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()

a1 = a.A()
b1 = b.B()
b2 = b.B()
c1 = c.C()
c2 = c.C()

a1.Bs.append(b1)
a1.Bs.append(b2)    
a1.Cs.append(c1)
a1.Cs.append(c2)    
session.add(a1)
session.commit()

python2 的工作原理:

$ python main.py ; echo $?
0

python3 错误:

$ python3 main.py ; echo $?
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    from model import a
  File "/home/shale/code/py/try/model/a.py", line 2, in <module>
    from base import Base
ImportError: No module named base
1

我最终通过将 base.py 中的代码放入我的 __init__.py 文件中解决了这个问题(如下面的一个答案所述),但有谁知道为什么这会在 python3 中产生错误,但在 python2 中不会产生错误?首先是什么变化造成了这种情况?


Python 3 切换到absolute默认导入,不允许不合格的相对导入。这from base import Baseline 就是这样一个进口。

Python 3 只会寻找顶级模块;你没有base仅顶层模块model.base。使用完整模块路径,或使用相对限定符:

from .base import Base

The .开头告诉 Python 3 从当前包开始导入。

您可以通过添加以下内容在 Python 2 中启用相同的行为:

from __future__ import absolute_import

这是由PEP 328,以及from future从 Python 2.5 开始可以使用导入功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导入处理/模块从 python2 更改为 python3? 的相关文章

  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • Pandas 字符串提取所有匹配项

    我正在学习 pandas 系列字符串方法中的正则表达式操作 我能够从字符串中提取第一个数字 但我的正则表达式与第二个数字不匹配 如何捕获这两个数字 注意第二行 第二个元素在这里是 NAN CODE import pandas as pd d
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • 小数缓存是Python规范中定义的还是一个实现细节?

    Python 似乎有一个所谓的 小数字缓存 用于存储 5 到 256 范围内的数字 我们可以使用以下程序来演示这一点 for i in range 7 258 if id i id i 0 print i is cached else pr
  • 检测/删除 Python 2 + GTK 中不成对的代理字符

    在Python 2 7中我可以成功转换Unicode字符串 abc udc34xyz 转换为 UTF 8 结果是 abc xed xb0 xb4xyz 但是当我将 UTF 8 字符串传递给例如时 pango parse markup or
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • Flask 中的 import 和 extends 有什么区别?

    我正在阅读 Flask Web 开发 在例4 3中 extends base html import bootstrap wtf html as wtf 我想知道 extends 和 import 有什么区别 我认为它们在用法上很相似 在什
  • python-polars 通过分隔符将字符串列拆分为许多列

    在 pandas 中 以下代码会将 col1 中的字符串拆分为许多列 有没有办法在极地做到这一点 d col1 a b c d a b c d df pd DataFrame data d df a b c d df col1 str sp
  • 如何删除 pandas 数据框中的唯一行?

    我遇到了一个看似简单的问题 在 pandas 数据框中删除唯一的行 基本上 相反drop duplicates https pandas pydata org pandas docs stable generated pandas Data
  • Python,多线程,获取网页,下载网页

    我想在一个站点批量下载网页 我的 urls txt 文件中有 5000000 个 url 链接 大约有300M 如何让多线程链接这些网址并下载这些网页 或者如何批量下载这些网页 我的想法 with open urls txt r as f
  • 使 np.loadtxt 使用多个可能的分隔符

    我有一个程序可以读取数据文件 用户可以选择他们想要使用的列 我希望它对于输入文件更加通用 有时 列可能如下所示 10 34 24 58 8 284 6 121 有时它们可 能看起来像这样 10 34 24 58 8 284 6 121 我希
  • 如何在 Pytorch 中将一维 IntTensor 转换为 int

    如何将一维 IntTensor 转换为整数 这 IntTensor int 给出错误 KeyError Variable containing 423 torch IntTensor of size 1 我所知道的最简单 最干净的方法 In
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • Python:帮助(numpy)在退出时导致段错误

    我遇到了一个奇怪的现象 在 python 解释器中 我执行以下操作 gt gt gt import numpy gt gt gt help numpy 帮助显示正确 但一旦我按 q 返回解释器 Segmentation fault core
  • Flask 扩展未在 app.extensions 中注册

    我想访问在我的 Flask 应用程序上注册的一些扩展 我尝试使用app extensions 但我初始化的一些扩展不在字典中 from flask import current app current app extensions get
  • 如何配置 Eclipse 在使用 Pydev 插件选择“运行”或“调试”时启动浏览器

    我正在使用 Eclipse Pydev 插件学习 Python 和 Django 当我按 运行 或 调试 时 我希望内部或外部浏览器使用 URL http 127 0 0 1 启动或刷新 我见过用 PHP 插件完成的 但没有用 Pydev

随机推荐

  • ggplot 增加箱线图之间的距离

    如何避免附加箱线图 谢谢 ggplot df aes x factor time y val fill ID geom boxplot scale fill manual values c WT goldenrod3 KO steelblu
  • 设置 char* 缓冲区并中间转换为 int*

    我无法完全理解我在这里读到的内容的后果 将 int 指针转换为 char ptr 反之亦然 简而言之 这行得通吗 set4Bytes unsigned char buffer const uint32 t MASK 0xffffffff i
  • 无法在 D3 JavaScript 库中获取点击事件

    我正在使用 D3 JavaScript 库将数据显示为力定向标记 效果很好 但我无法将点击事件添加到圈子中 因此 当我单击圆圈时 我会获得对该圆圈的详细分析并将其显示在模式框中 var links source x target y typ
  • 将生成的 PIL 图像保存到 django 中的 ImageField 中

    我在用qrcode生成二维码 当购买门票或购买真实时 我想生成一个二维码图像并使用 PIL 进行一些更改 最后将修改后的画布保存到模型的Image字段中 class Ticket models Model booked at models
  • Angular ui 模式与控制器位于单独的 js 文件中

    我正在尝试制作一个可以从应用程序中的多个位置实例化的模式 从这里给出的例子 Bootstrap 的 Angular 指令模态控制器与实例化模态的控制器位于同一文件中 我想将模态控制器与 应用程序 控制器分开 索引 html
  • Inno Setup 组件的详细描述

    我正在使用 Inno Setup 构建安装 并使用组件部分来允许最终用户选择要安装的可选项目 其中一些项目需要更长的描述 以便用户有足够的信息来智能地选择它们 有没有办法在某处添加更深入的描述 此解决方案仅使用正确的 Inno Setup
  • 为什么 Qt Creator 3.0.0 欢迎模式在 VM 中不起作用?

    我最初在我的 Win7 64 位机器上安装了 Qt 5 20 和 Qt Creator 3 0 它运行得很好 然后我想将其安装到Win7 32位虚拟机中 使用VirtualBox 在虚拟机中 我从 qt project org 网站开始并下
  • javascript更改获取参数而不重定向[重复]

    这个问题在这里已经有答案了 如何只更改 get 参数而不重定向 parent location search after 20 ok that changes but also redirect to the new page 有什么解决办
  • 如何使用 pip 卸载可编辑包(使用 -e 安装)

    我已经用 e 安装了一些软件包 gt pip install e git https github com eventray horus git 2ce62c802ef5237be1c6b1a91dbf115ec284a619 egg ho
  • 替代 MySQL 的 UUID 版本 1 功能?

    Context Web 应用程序 PHP 5 MySQL 5 0 91 问题 我最近从使用自动递增整数改为使用 UUID 作为某些表的主键 通过 MySQL 生成 UUID 时UUID 功能 它们彼此非常相似 uuid 1e5988da a
  • gfortran 傻瓜版: mcmodel=medium 到底是做什么的?

    我有一些代码在编译时出现重定位错误 下面是说明该问题的示例 program main common baz a b c real a b c b 0 0 call foo print b end subroutine foo common
  • 中缀运算符的 Scala 匹配分解

    我试图理解的实施List在 Scala 中 特别是 我试图了解如何使用中缀运算符编写匹配表达式 例如 a match case Nil gt An empty list case x Nil gt A list without a tail
  • 应用程序标题旁边的红点?

    在模拟器上 我注意到我的应用程序标题旁边有一个红色圆圈 类似于新下载的应用程序旁边出现的蓝色圆圈 但只是红色 它看起来是这样的 这意味着什么 我得到了这个问题的实际解决方案 这是由于配置配置文件造成的 如果您在应用程序构建设置中使用实时应用
  • 多个可选参数web api属性路由

    我是属性路由的新手 我不确定这是否可能 我有一个属性路由 它的工作原理如下 HttpGet Route GetIssuesByFlag flag int 3 public IEnumerable
  • JDBI 接受 UUID 参数吗?

    当使用 SQL 对象参数绑定时 JDBI使用 UUID 参数开箱即用 我有一个这样的方法 SqlQuery EXECUTE MyProcedure myField MyDto myMethod Bind myField UUID myFie
  • Ubuntu 升级到 19.10 后 Minikube 将无法工作

    我刚刚将 Ubuntu 从 19 04 升级到 19 10 现在 Minikube 无法启动 所以 过了一段时间 我就完全删除了Minikube minikube stop minikube delete docker stop docke
  • 无法在非 Boost 版本的 Asio 中使用 asio::placeholders::error

    我正在尝试在项目中使用 Asio 的非 Boost 版本 我正在写一个回调stream protocol acceptor async accept 签名需要asio placeholders error要通过 但当我这样做时 出现以下错误
  • 如何在node.js中的“require”之后删除模块?

    比方说 在我需要一个模块并执行以下操作之后 var b require b js do something with b 然后我想拿走模块b 即清理缓存 我怎样才能做到呢 原因是我想动态加载 删除或更新模块而不重新启动节点服务器 任何想法
  • 如何更改 Visual Studio 中控制台应用程序的图标?

    我正在 VS 2008 中开发 C 控制台应用程序 无法更改图标文件 我更改了图标文件project gt properties gt application选项卡 但旧图标仍然与新版本一起显示 检查了帖子中的以下答案以修改 resx 文件
  • 导入处理/模块从 python2 更改为 python3?

    我试图遵循中所示的设计模式上一个问题与 SQLAlchemy 相关 旨在跨多个文件共享公共 Base 实例 代码与 python2 和 python3 完全相同 但是 当我在模块 称为 model 中移动文件 a py b py c py