直接导入失败但“from ... import ...”成功

问题描述 投票:0回答:1

我在文件夹

my_module.py
中有一个名为
~/my_module
的 Python 模块。我想从 Python 解释器调用这个模块,但我不知道它的目录。我跑:

import os
os.chdir(os.path.expanduser("~/my_module"))

import my_module

并且失败了。但如果我使用

from ... import ...
,那么它就有效:

import os
os.chdir(os.path.expanduser("~/my_module"))

from my_module import my_module

如果我将文件夹的名称更改为与模块的名称不同,则可以直接导入。这是为什么?

python import module syntax
1个回答
0
投票

默认情况下,该文件夹中的文件在模块中不可用。

当您在代码中输入

import xyz
时,可能会发生以下两种情况之一:

  1. 有一个文件
    xyz.py
    ,那么这个文件就会被导入
  2. 有一个名为
    xyz
    的文件夹,则该文件夹内的文件
    __init__.py
    将被导入

默认情况下不导入除

__init__.py
之外的其他文件。如果您想保持这样的文件结构,您应该在
__init__.py
文件夹中添加一个文件
my_module
并在其中放入以下内容:

from . import my_module

from .
表示python将在当前目录中查找该文件。然后,当在主文件中调用
import my_module
时,
my_module
将具有一个属性
my_module
,它包含
my_module/my_module.py
中定义的所有内容。

(你应该考虑重命名这个......)

有什么不清楚的地方请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.