运行setup.py时遇ImportError:无法从'schema'导入'Base'
问题分析与解决
问题根源
从回溯信息可以明确:运行setup.py时,customers/customers_db.py里的from schema import Base, Contact, Address语句,导入的是虚拟环境site-packages目录下的第三方库schema,而非你自己编写的customers/schema.py。
单独运行customers_db.py时无错误,是因为此时Python会将customers目录加入模块搜索路径,优先加载同目录下的schema.py;但运行setup.py时,当前工作目录是src,Python会先搜索site-packages中的第三方库,导致与自定义模块重名冲突。
解决方案
有两种可靠的修改方式,任选其一即可:
方式1:使用相对导入
在customers_db.py中,改用相对导入指定同包内的schema模块:
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine import os # 相对导入同目录的schema模块 from .schema import Base, Contact, Address
方式2:使用绝对导入
明确指定导入customers包下的schema模块:
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine import os # 绝对导入自定义的schema模块 from customers.schema import Base, Contact, Address
内容的提问来源于stack exchange,提问作者KrimblKrum
相关产品推荐
相关产品推荐

