【发布时间】:2019-04-10 10:03:42
【问题描述】:
我对 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
当我尝试从其他文件夹导入包时,我收到以下错误消息:
Traceback(最近一次调用最后一次):
文件“/root/git-repos/Yu-Gi-Oh/decks/deck.py”,第 3 行,在 从卡片导入 TrapCard、MonsterCard、SpellCard、RitualCard ModuleNotFoundError: 没有名为“卡片”的模块
【问题讨论】:
-
您是指
from . trap_card import TrapCard还是from .trap_card import TrapCard?如果您要使用相对导入,则不应有空格。 -
我的意思是从 .trap_card 导入 TrapCard。谢谢你。我修复了相对导入,但仍然无法从其他包中导入模块。