Ошибка ModuleNotFoundError при использовании функции из пользовательского модуля, который импортирует другой пользовательский модуль

#python #python-3.x #module #runtime-error #python-import

#питон #python-3.x #модуль #время выполнения-ошибка #python-импорт

Вопрос:

У меня есть структура папок, похожая на эту (в моем примере есть все необходимые биты).:

 web-scraper/
    scraper.py
    modules/
        __init__.py
        config.py
        website_one_scraper.py
 

Где config.py просто хранятся некоторые глобальные переменные. Это выглядит немного похоже на:

 global var1
var1 = "This is a test!"
 

Внутри website_one_scraper.py это выглядит примерно так:

 import config

def test_function():
    # Do some web stuff...
    return = len(config.var1)

if __name__ == "__main__":
    print(test_function)
 

И scraper.py выглядит примерно так:

 from module import website_one_scraper

print(website_one_scraper.test_function())
 

website_scraper_one.py работает нормально, когда запускается сам по себе, и, таким образом, выполняется приведенный ниже код if __name__ == "__main__" . Однако, когда я запускаю scraper.py , я получаю сообщение об ошибке:

 ModuleNotFoundError: No module named 'config'
 

И это полная ошибка и трассировка (хотя и с другими именами, так как я изменил некоторые имена для примера выше):

 Traceback (most recent call last):
File "c:UsersUserDocumentsProgrammingWorkintrack-web-scrapersatellite_scraper.py", line 3, in 
<module>
from modules import planet4589
File "c:UsersUserDocumentsProgrammingWorkintrack-web-scrapermodulesplanet4589.py", line 5, in 
<module>
import config
ModuleNotFoundError: No module named 'config'
 

Также обратите внимание, что в scraper.py я пробовал заменить from modules import website_one_scraper на import website_one_scraper , from .modules import website_one_scraper , и from . import website_one_scraper , но все они не работают.

В чем может быть причина моей ошибки? Может ли это быть как-то связано с тем, как я все импортирую?

(Я использую Python 3.9.1)

Ответ №1:

В вашем website_scraper_one.py , вместо import config.py того, чтобы пытаться использовать from . import config

Объяснение:

  • . является ли текущий пакет или текущая папка
  • config — это модуль для импорта

Комментарии:

1. Это создает ошибку ImportError: attempted relative import with no known parent package при website_scraper_one.py непосредственном запуске…

2. ДА. Это должно выдать ошибку. Внутри modules вы создали пакет python, relative imports в котором есть. Таким образом, в этом случае вы должны запустить модуль website_scraper_one.py as a python, by python -m modules.website_scraper_one , и это решит проблему. Спасибо