Я пытаюсь запустить очень простой проект Python на VScode/Pycharm.
Структура каталогов
PythonAnalyticalProject/
├── sales_analysis/
│ ├── __init__.py
│ ├── cli.py
│ ├── constants.py
│ ├── db.py
│ ├── sales_analysis.py (contains main)
├── images/
│ ├── image1.png/
│ └── image2.png/
├── setup.py
└── requirements.txt
Я установил зависимости require.txt, а также добавил каталог проекта в PYTHONPATH.
Но я все еще получаю сообщение об ошибке при выполнении sales_anaанализ.py.
ModuleNotFoundError: No module named 'sales_analysis.cli'; 'sales_analysis' is not a package
Эта ошибка возникла в строке, содержащей оператор импорта.
from sales_analysis.cli import user_continue
Как мне решить эту ошибку. Кажется, я выполнил все необходимые настройки, но ошибка все еще сохраняется.
И он не НАЙДЕТ модуль, если текущий каталог находится внутри sales_analysis
. Вам нужно будет добавить родительский каталог в путь Python. Либо так, либо просто делайте import cli
.
Я предполагаю, что вы не писали этот код, а просто пытаетесь его запустить. В этом случае вам следует подать заявку об ошибке, чтобы исправить код и/или инструкции по использованию. Однако если вы пишете код, сначала извлеките минимальный воспроизводимый пример.
Переименуйте папку sales_anasis или файл sales_anasis.py, чтобы избежать конфликта имен.
Поскольку вы используете sales_anaанализ.py, было бы целесообразнее заменить:
питон
from sales_analysis.cli import user_continue
с:
питон
from .cli import user_continue
Это изменение необходимо, поскольку в каталоге уже есть папка. Если вы запустите setup.py, проблем с именованием папок не возникнет.
Используя относительный импорт (из .cli import user_continue), вы правильно ссылаетесь на модуль cli в том же пакете. Такой подход обеспечивает совместимость и позволяет избежать конфликтов с именами пакетов.
Для получения дополнительной информации вы можете обратиться к статьям по RealPython
Запуская код как python path/to/sales_analysis/sales_analysis.py
, вы неявно добавляете path/to/PythonAnalyticalProject/sales_analysis/
к PYTHONPATH
. Когда путь добавляется таким образом, он также будет первой записью, которая будет проверяться на наличие модулей и пакетов! Это означает, что import sale_analysis
будет искать PythonAnalyticalProject/sales_analysis/sales_analysis.py
вместо PythonAnalyticalProject/sales_analysis/
в качестве источника модуля/пакета sales_analysis
.
Чтобы не добавлять path/to/PythonAnalyticalProject/sales_analysis/
к PYTHONPATH
, запустите код следующим образом:
python -m sales_analysis.sales_analysis
Есть три способа решить эту проблему:
Измените имя каталога sales_analysis
на другое имя. Помните, не меняйте имя файла sales_analysis.py
Python.
Измените оператор импорта на импорт с использованием точечной записи:
from .cli import user_continue
Альтернативно вы можете изменить оператор импорта на импорт полного пути, например:
from PythonAnalyticalProject.sales_analysis.cli import user_continue
У вас есть файл Python и папка модуля с именем
sales_analysis
. Вы намеревались импортировать модуль, но сначала он нашел файл. Самое простое решение — переименовать один из них.