我无法从其他文件夹导入模块

时间:2019-04-10 10:03:42

标签: python-3.x python-import

我对Python世界有点陌生。我正在使用Python3,并且在导入时遇到困难。

我在Windows上使用PyCharm编写应用程序。在我切换到Linux和VS Code之前,一切都在整个项目中进行。

现在,我不能使用绝对导入来从同一项目中的其他包中导入模块。

例如,我想从模块卡中导入所有可用的卡类型。

我测试了课程,一切正常。我只遇到了导入问题。

The project structure:

/
|-cards
    |-__init__.py
    |-card.py
    |-monster_card.py
    |-spell_card.py
    |-trap_card.py
    |-ritual_card.py
|-deck
    |-__init__py
    |-deck.py
|-system

# This is the code in __init__.py in cads package
from . trap_card import TrapCard
from . spell_card import SpellCard
from . ritual_card import RitualCard
from . monster_card import MonsterCard

__all__ = [TrapCard, SpellCard, RitualCard, MonsterCard]

# The following line, for example, does not work from inside another package
# I'm trying to import the modules in cards from deck
from cards import TrapCard, MonsterCard, SpellCard, RitualCard

当我尝试从另一个文件夹导入软件包时,出现以下错误消息:

回溯(最近通话最近一次):

  

文件“ /root/git-repos/Yu-Gi-Oh/decks/deck.py”,第3行,在   从卡中导入TrapCard,MonsterCard,SpellCard,RitualCard   ModuleNotFoundError:没有名为“卡”的模块

output

1 个答案:

答案 0 :(得分:0)

调用import *时,python从sys.path中搜索模块。您需要在调用import stmt之前将根目录添加到sys.path中。

对于您的情况,您的根目录为/

喜欢:

import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

from cards import *

其他方式

将文件__init__.py添加到您的根目录中以使其成为模块。然后将from cards import *更改为from .cards import *