#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, bypython -m modules.website_scraper_one
, и это решит проблему. Спасибо