我的队友在代码库中添加了明确的相对导入。
from .modulename import classname
现在,如果我尝试运行该文件,会收到“尝试以非软件包方式进行相对导入”错误吗?
我试图在Python2中运行此文件,他进行了更改,以使该文件与Python3兼容。目前,我必须在Python2中运行此文件
我要运行的文件和它要导入的文件位于同一目录中,该目录是我尝试启动此文件的目录。
答案 0 :(得分:0)
显式相对导入在Python 2和Python 3中的工作原理完全相同。问题是,其中一个人在错误地运行您的代码-可能您是这样,尽管这里没有足够的信息可以确定。
如果该文件应该是软件包的一部分,则说明您运行错误。您应该不直接按文件名运行它,并且在运行它时不应位于包目录中。实际上,您很有可能根本不应该运行它,而只是从其他文件导入它。如果确实要运行它,则命令将在可导入顶级软件包的位置python -m packagename.modulename
处进行-如果未安装该软件包,则该目录可能包含该软件包的目录。
如果该文件不应该作为软件包的一部分,则说明您的队友运行错误。显式相对导入应转换为绝对导入,并且应添加
from __future__ import absolute_import
到文件顶部,以确保您不会意外获得隐式相对导入。在这种情况下,您的伙伴将需要停止运行该文件,无论他们一直在运行该文件。