класс импорта python в модуле выдает ImportError - PullRequest
0 голосов
/ 05 мая 2018

Извините, если этот вопрос кажется очень простым, я достаточно опытен в Java, но абсолютно не в Python, и то, как импорт работает в Python, все еще остается загадкой для меня.
Проблема в том, что из того, что я собрал из интернета, я чувствую, что сделал все, что нужно для моего скрипта, чтобы импортировать модуль в папку.

мой проект выглядит так

/omme
    start.py
    /foo
        __init__.py   #is empty
        bar.py        #has a class named BarClass

start.py имеет только это

from foo.bar import BarClass

b = BarClass()

когда я запускаю этот скрипт в IDE spyder, я получаю это

runfile('/home/nathan/Documents/workspace/omme/start.py', wdir='/home/nathan/Documents/workspace/omme')
Reloaded modules: foo.bar
Traceback (most recent call last):

  File "<ipython-input-38-c3b9ba6593fb>", line 1, in <module>
    runfile('/home/nathan/Documents/workspace/omme/start.py', wdir='/home/nathan/Documents/workspace/omme')

  File "/home/nathan/.anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "/home/nathan/.anaconda3/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/home/nathan/Documents/workspace/omme/start.py", line 1, in <module>
    from foo.bar import BarClass

ImportError: cannot import name 'BarClass'

, а затем еще более странно, если я заменим foo.bar на test.bar , он выдаст исключение ModuleNotFoundException (я подозреваю, что некоторые идеальные махинации).

Что я делаю не так?

Спасибо за ваше время, искренне Натан.

1 Ответ

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

спасибо за @zvone, теперь я знаю свою ошибку: я просто неправильно ввел название класса ... извините за ваше время.

Поскольку я не могу снять вопрос, я расскажу вам простой трюк, который @vzone сказал мне, чтобы решить две проблемы, которые у меня были:

import lib
print (lib)

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

import lib
print (dir( lib))

дает вам довольно аккуратный взгляд на то, что в ваших классах, что облегчает отладку.

Спасибо, парень, он сделал все это в комментариях.

...