Я сталкиваюсь с тем, что, по моему мнению, является довольно распространенной проблемой в приложениях Python - ImportError: No module named lib.handle_data
- но я недостаточно опытен с экосистемой Python / Flask, чтобы действительно понять, почему это происходит, особенно с учетом того, что мой код работал , пока я не внес небольшую корректировку и не переустановил некоторые зависимости.Хорошо, вот как все прошло ...
Я работаю над приложением Flask, и до недавнего времени оно работало нормально.Я понял, что не включил семантическое управление версиями для зависимостей в мой файл setup.py
.Первоначально файл выглядел так:
from setuptools import setup
setup(
name='my_app',
packages=['my_app'],
include_package_data=True,
python_requires='>3.6.4',
install_requires=[
'flask',
'gtfs-realtime-bindings',
'gunicorn',
],
)
, который я изменил, чтобы он выглядел так:
from setuptools import setup
setup(
name='my_app',
packages=['my_app'],
include_package_data=True,
python_requires='>3.6.4',
install_requires=[
'flask==0.12.2',
'gtfs-realtime-bindings==0.0.5',
'gunicorn==19.7.1',
],
)
, а затем, чтобы убедиться, что все было хорошо, я запустил python setup.py install
и всеказалось, все прошло нормально - ни одна из версий не изменилась, так как это были те, которые уже были установлены.
Однако, когда я запустил flask run
, сервер не запустился, и у меня осталась ошибка:
import my_app.lib.handle_data as HandleData
ImportError: No module named lib.handle_data
и попытка запустить сервер с gunicorn через
gunicorn my_app.my_app:app -b 0.0.0.0:8000
приводит к той же ошибке (не удивительно, я уверен, просто исчерпывающе).
Вот структура файла:
setup.py
my_app/
|
- __pycache__/
- __init__.py
- my_app.py
- lib/
|
- __pycache__/
- __init__.py
- handle_data.py
- request.py
Содержимое my_app/__init__.py
:
from .my_app import app
и my_app/lib/__init__.py
пусто.
Как я сломал свое приложение, и как я могу это исправить?
Python версия 3.6.4, работает на MacOS Mojave, 10.14.И если я не прояснил это, мое приложение работало нормально, прежде чем я сделал это изменение / переустановил deps.