来自模块的Python导入类说模块未找到错误

时间:2020-03-22 20:37:45

标签: python python-import

我在这个很小的地方很困惑。

我有一个constants.py文件,如下所示

if env=="qa":
    from myproject.qa import settings
else:
    from myproject.prod import settings

当我尝试将其导入如下所示的另一个文件中时,我得到module not found

from constants import settings
from settings import *

但是下面的语句有效

from constants import settings
print(settings.UserSettings)

下面是我的目录结构

constants.py
myproject
 -qa
   -settings.py
 -prod
   -settings.py

1 个答案:

答案 0 :(得分:0)

两个版本之间有区别。

第一版

在第一个版本中,您将settings作为模块导入constants中。

然后,您尝试再次将其导入另一个模块(您未提及其名称)。

然后,您尝试使用有问题的语句:from settings import *

我猜想在尝试使用from语句时python不会搜索已经导入的模块。不幸的是,我不知道这是否是它不起作用的真正原因(我不是该级别的专家)。

第二版

在第二个版本中,您将settings作为模块导入constants中。然后,您尝试再次将其导入另一个模块(您未提及其名称),并使用其中定义的对象。

这是可行的,因为python仅尝试访问已导入模块的对象,而不使用from语句再次“导入”该对象。

可能的解决方案

您可以将constants.py中的import语句更改为:

from myproject.settings import *
print(UserSettings) # works

我还认为第二种选择还不错:

from constants import settings
print(settings.UserSettings) # works as well