Ошибка ModuleNotFoundError при запуске скрипта

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

Я запускаю команду python3 folder1 / script1.py на терминале в корневом каталоге, но получаю сообщение об ошибке ModuleNotFoundError: Нет модуля с именем «folder2» . Я добавил __ init __.py в папки, но все еще не нашел решения.

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

└── root
    ├── folder1
    │   ├── script1.py
    │   
    └── folder2
        ├── module1.py

module1.py:

def say_hello():
    print('hello')

scipt1.py:

from folder2 import module1

module1.say_hello()

Изображение 78605

# python-3.x
Источник
  • 0
    Смотрите этот ответ. stackoverflow.com/questions/14886143/…
  • 0
    Я пробовал это. У меня это не сработало.
Codelisting
за 1 против
Лучший ответ

Как правило, модули python должны быть установлены, чтобы python мог их найти. Одно побочное правило состоит в том, что python будет искать в пути к сценарию, чтобы увидеть, есть ли там модуль. Двигатьсяscript1.py на уровень ниже, убедитесь, что у вас есть__init__.py и это будет работать.

└── root
    ├── script1.py
    │   
    └── folder2
        ├── __init__.py
        ├── module1.py

Вы также могли быscript1.py вставить его прародительский каталог вsys.path . Но на самом деле лучший способ решить проблему - сделать пакет устанавливаемым, добавив файл setup.py. Крайне примитивная версия - это

import setuptools

setuptools.setup(
    name="Foobar",
    packages=setuptools.find_packages(),
    scripts=["folder1/script1.py"]
)

и ваш каталог может быть

└── root
    ├── setup.py
    ├── folder1
    │   ├── script1.py
    │   
    └── folder2
        ├── __init__.py
        ├── module1.py

Теперь ты можешь сделатьpython setup.py develop для запуска вашего скрипта из вашего каталога разработки. Илиpython setup.py install (часто в созданном вами venv), чтобы сделать его стандартной установкой.

за 0 против

Правильное использование для init с двойным подчеркиванием;

__init__ 

I added _ init _.py to the folders but still couldn't find a solution.

Вы пишете init с одним.

  • 0
    Я добавил пустые файлы инициализации. Но это не выход.
Codelisting
Популярные категории
На заметку программисту