[英]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 views
或from . 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.