我对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:没有名为“卡”的模块
答案 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 *
。