我正在运行Ubuntu 16.04.6的apache服务器上创建flask应用程序。导入模块时遇到一个非常奇怪的问题。我的包含我应用的 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和 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
奇怪的是,当我转到此目录(带有我的flask应用程序的目录)并从命令行运行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程序包中执行此操作,当然还要更新部分代码以适应此更改,从而阻止了错误的发生。