Я делаю колбу на сервере apache под управлением Ubuntu 16.04.6. У меня очень странная проблема с импортом модуля. Мой init .py, содержащий мое приложение, начинается с
from flask import Flask, render_template, request, url_for, redirect, session, jsonify
import question_testing
Я получаю ошибку 500, и при проверке логов он говорит, что это из-за question_testing.py
question_testing.py начинается с:
from math_blocks.polynomials import polynomial
from math_blocks.quadratics import quadratic
from math_blocks.cubics import cubic
question_testing.py находится в том же каталоге, что и init .py, а math_blocks также является пакетом в этом каталоге (это означает, что папка, содержащая polynomials.py и т. Д., Находится в каталоге question_testing.py и * 1014 INIT * .py).
FlaskApp
-------- __init__.py
-------- question_testing.py
-------- math_blocks
-------------------- polynomials.py
-------------------- poly_terms.py
В пакете math_blocks модуль полиномов начинается с импорта другого модуля math_blocks:
from math_blocks.poly_terms import poly_term as poly_term
Согласно логам, это то место, где появляется ошибка. Это была ошибка:
from FlaskApp import app as application
File "/var/www/FlaskApp/FlaskApp/__init__.py", line 4, in <module>,
import question_testing
File "/var/www/FlaskApp/FlaskApp/question_testing.py", line 1, in <module>,
from math_blocks.polynomials import polynomial
File "/var/www/FlaskApp/FlaskApp/math_blocks/polynomials.py", line 2
from math_blocks.poly_terms import poly_term as poly_term
ImportError: No module named math_blocks.poly_terms
Что странно, когда я захожу в этот каталог (тот, в котором находится мое приложение фляги) и запускаю python из командной строки, я могу импортировать math_blocks.polynomials без проблем, я могу импортировать question_testing без проблем, и даже init .py, в котором есть мое приложение для колб.
>>> import __init__
>>> __init__.question_testing.polynomial
<class math_blocks.polynomials.polynomial at 0x7f29ad7646d0>
Эта ошибка импорта возникает, только когда init .py запускается как сервер после того, как я сделаю запрос из браузера.
Может кто-нибудь помочь мне понять, почему я получаю эту ошибку?
РЕДАКТИРОВАТЬ - полу решен
Я понятия не имею, почему это сработало, но изменение импорта в пределах math_blocks на относительное, похоже, решило мою проблему.
Теперь в polynomials.py у меня есть:
from .poly_terms import poly_term
Выполнение этого в пакете math_blocks и, конечно же, обновление частей кода с учетом этого изменения остановило возникновение ошибки.