Python 3.6 не может разрешить импорт, если модуль выполняется из другой папки - PullRequest
0 голосов
/ 10 марта 2019

У меня есть папка и структура кода, подобная этой

root folder
|
|---core folder
|     |
|     |----transaction.py
|     |            
|     |----executetransaction.py       
|
|---test folder
      |
      |----test_execute_transaction.py

action.py

class Transaction:
    def __init__(self,json):
        print("in create object")

executetransaction.py

from transaction import Transaction

def execute_transaction(json):
    trsobj = Transaction(json)

test_execute_transaction.py

import sys
sys.path.append("../")

from core import executetransaction
executetransaction.execute_transaction({"a":"b"})

при выполнении test_execute_transaction он может import executetransaction из основной папки, но я получаю ModuleNotFoundError: No module named 'transaction' в строке кода импорта в модуле executetransaction.

Если я запускаю execute_transaction({"a":"b"}) в executetransaction модуле, затем transaction импортируется, как и ожидалось, и я получаю "in create object".

Я добавил пустой __init__.py во все папки.

Это мой первый вопрос, пожалуйста, сообщите мне, если требуется более подробная информация.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Хорошо, ваша проблема в том, как вы импортируете модуль транзакции в executetransaction.py.

Измените from transaction import Transaction на from .transaction import Transaction.Оператор точки сообщает Python, что вы хотите импортировать из текущего пакета.

0 голосов
/ 10 марта 2019

Это может помочь вам Использование локального импорта

При импорте пакета Python просматривает каталоги в sys.path в поисках подкаталога пакета. docs.python.org / 3 / учебник / модули

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...