繁体   English   中英

为什么相对导入在Python 3中不起作用?

[英]Why don't relative imports work in Python 3?

我最近从python2.7升级到python3,并认为它可能搞砸了一些配置。 现在,当我尝试运行模块时,出现导入错误。 假设我有一个这样的目录结构:

/directory
/directory/__init__.py
/directory/run.py
/directory/app/db.py
/directory/app/views.py
/directory/app/__init__.py

具有以下进口...

/directory/run.py says 'import app'
/directory/app/db.py says 'import views'

当我执行run.py时,出现一个错误,提示找不到模块视图。 但是,如果我进入/ directory / app并执行db.py,则导入将正确运行。 我还发现,如果我将/directory/app/db.py更改为“来自应用程序导入视图”,则在执行run.py时它可以正常工作。 但是,这曾经用于所有工作!

似乎import语句没有考虑要在其中执行的文件夹。这似乎希望我将所有导入都基于根文件夹,这似乎是不正确的,需要我花费一些时间来更改所有内容。

有什么想法发生了什么? 这让我发疯。

在Python3中,隐式相对导入已被删除,所有导入都必须是绝对导入,或使用显式相对导入。

这不会改变,您需要将它们替换为from app import viewsfrom . import views from . import views

Python 2.x和Python 3.x有很多不同之处,通常使用2to3或其他类似工具“移植”(转换)代码非常有帮助。

您遇到的问题很可能与以下事实有关:Python 2使用相对导入,而Python 3使用绝对导入(我可能倒数了)。 可以更改import语句以使导入工作,但是对于肯定会出现的兼容性问题,我强烈建议使用2to3,然后手动进行任何最终调整。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM