Импортировать файл из каталога lib?

Я реорганизовал свой проект, потому что где-то была проблема, но, как всегда бывает в программировании, проблема теперь в 10 раз хуже, и все сломано.

Мое текущее дерево файлов, которым я доволен:

Amazons AI
  - .git
  - Game_Code
    - __pycache__
    - game.py
  - lib
    - __pycache__
    - __init__.py (empty)
    - motion.py
    - pieceManagement.py
  - tests
    - __pychache__
    - test_game.py
  - README.md

Моя проблема в том, что в game.py (в папке Game_Code мне нужно импортировать motion.py и pieceManagement.py (оба в каталоге lib).

Я пробовал несколько способов подняться на уровень в каталоге, импортировать lib, а затем все остальное, в основном используя предложения в Импортировать файл из подкаталога?, но ничего не сработало. Для справки, я использую Python 3.7.3.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
206
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не эксперт, но в прошлые выходные я написал код на Python с аналогичной структурой и использовал ссылку на импорт folder.file, чтобы отразить структуру папок:

from lib.motion import classObject as ObjectName 
from lib.pieceManagement import classMethod() as MethodName()

Не совсем уверен, почему, но я получаю ошибку module not found.

CtrlAltF2 28.06.2019 18:56
Ответ принят как подходящий

Чтобы получить доступ к libs в родительском каталоге текущего файла, можно сделать это:

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/libs")

Он добавляет родительский словарь + /libs к системному пути, где python будет знать, как его искать, как описано в Python — для чего нужна подпапка libs?. Однако мне не нравится это решение, так как оно приводит к такому уродливому коду:

import os
import sys

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/libs")

from pieceManagement import piece
import motion

Поэтому я все еще хотел бы найти питонический способ сделать это, возможно, встроенный в операторы импорта. Но я знаю, что это работает (на моей машине).

Другие вопросы по теме