Возникли проблемы с импортом в Python - PullRequest
0 голосов
/ 13 мая 2018

Я использую Python 2.7.Я пытаюсь запустить свой скрипт автоматизации пользовательского интерфейса, но я получил ImportError.

У меня есть как минимум 30 классов с методами.Я хочу иметь эти методы в каждом классе, поэтому я создал BaseClass (MainClass) и создал объекты всех моих классов.Посоветуйте, пожалуйста, что мне делать в этом случае или как я могу решить эту проблему.

Вот пример того, что похоже на мой код.

test_class / baseclass.py

from test_class.first_class import FirstClass
from test_class.second_class import SecondClass


class MainClass:
    def __init__(self):
        self.firstclass = FirstClass()
        self.secondclass = SecondClass()

test_class / first_class.py

from test_class.baseclass import MainClass

class FirstClass(MainClass):
    def __init__(self):
        MainClass.__init__(self)

    def add_two_number(self):
        return 2 + 2

test_class / second_class.py

from test_class.baseclass import MainClass

class SecondClass(MainClass):
    def __init__(self):
        MainClass.__init__(self)

    def minus_number(self):
        return self.firstclass.add_two_number() - 10


if __name__ == '__main__':
    print(SecondClass().minus_number())

Когда язапустить последний файл я получаю эту ошибку

Traceback (most recent call last):
  File "/Users/nik-edcast/git/ui-automation/test_class/second_class.py", line 1, in <module>
    from test_class.baseclass import MainClass
  File "/Users/nik-edcast/git/ui-automation/test_class/baseclass.py", line 1, in <module>
    from test_class.first_class import FirstClass
  File "/Users/nik-edcast/git/ui-automation/test_class/first_class.py", line 1, in <module>
    from test_class.baseclass import MainClass
ImportError: cannot import name MainClass

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Вы, вероятно, выполняете свой код как python test_class/second_class.py. Если вы просто сделаете это, то python подумает, что базовый каталог для поиска модулей - ./test_class. Поэтому, когда вы импортируете пакет test_class, python начнет искать папку с именем ./test_class/test_class, чтобы найти субмодули. Этот каталог не существует, поэтому импорт не выполняется. Есть несколько способов, которыми вы можете сказать Python, как правильно найти ваши модули.

Использование PYTHONPATH

Один из способов обойти это - установить PYTHONPATH перед запуском python. Это просто переменная окружения, с помощью которой вы можете указать python, где искать ваши модули.

например.

export PYTHONPATH=/path/to/your/root/folder
python test_class/second_class.py

Использование ключа -m для python

По умолчанию python рассматривает каталог основного модуля как место для поиска других модулей. Однако, если вы используете -m, python вернется к поиску в текущем каталоге. Но вам также нужно указать полное имя модуля, который вы хотите запустить (а не в виде файла). например.

python -m test_class.second_class

Запись корневой точки входа

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

main.py (в /path/to/your/root/folder)

from test_class.second_class import SecondClass

if __name__ == '__main__':
    print(SecondClass().minus_number())

в командной строке

python main.py
0 голосов
/ 14 мая 2018

Вы можете попробовать импортировать полные файлы вместо использования из класса импорта файлов.Тогда вам нужно будет только добавить имя файла, прежде чем ссылаться на что-то из другого файла.

0 голосов
/ 13 мая 2018

проверьте эту строку: из test_class.baseclass import MainClass -> кажется, что у всех других импортов между именами, как second_class, есть '_'. Так что, возможно, попробуйте написать base_class. кто знает, может сработать

...