Я не могу импортировать модули из других папок - PullRequest
0 голосов
/ 10 апреля 2019

Я немного новичок в мире Python. Я использую Python3 и испытываю трудности с импортом.

Я использовал PyCharm в Windows, чтобы написать приложение. Все работало над проектом, пока я не переключился на 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: нет модуля с именем 'cards'

output

1 Ответ

0 голосов
/ 10 апреля 2019

Когда вы звоните import *, python ищет модуль по sys.path. Вам нужно добавить свой корневой каталог в sys.path перед вызовом import stmt.

В вашем случае ваш корневой каталог /.

как:

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 *.

...