Я изучил много вопросов, которые задавали раньше, но не смог найти решения своей проблемы.
Я запускаю команду 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()
Как правило, модули 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), чтобы сделать его стандартной установкой.
Правильное использование для init с двойным подчеркиванием;
__init__
I added _ init _.py to the folders but still couldn't find a solution.
Вы пишете init с одним.