我在我的 Mac 上本地运行 Flask 服务器。
我的项目:
project/my_lib/my_class.py
project/testing/flask_server.py
project/testing/something/test_class.py
有一次,我尝试使用一些相对导入来测试不同目录中的类:
在project/testing/something/test_class.py 中:
from ..my_lib.my_class import MyClass
这给了我一个错误:
ValueError: Attempted relative import beyond toplevel package
所以我放弃了,但现在我无法让我的 Flask 服务器运行,即使我消除了新的导入代码。
$ python testing/flask_server.py
吐出这个:
Traceback (most recent call last):
File "testing/flask_server.py", line 2, in <module>
from flask import Flask
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/werkzeug/__init__.py", line 154, in <module>
__import__('werkzeug.exceptions')
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/werkzeug/exceptions.py", line 71, in <module>
from werkzeug.wrappers import Response
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/werkzeug/wrappers.py", line 26, in <module>
from werkzeug.http import HTTP_STATUS_CODES, \
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/werkzeug/http.py", line 28, in <module>
from urllib.request import parse_http_list as _parse_list_header
ImportError: No module named request
嗯?
更新:
烧瓶导入错误仅发生在最初调用错误代码的目录中。也就是说,如果我这样做
from flask import Flask
从项目/测试目录中的任何地方,我都会收到导入错误,但是如果我在项目/或系统上的其他任何地方执行此操作,那很好..?
解决方案(部分):
我没有解释为什么会发生这种情况,但我做了以下修复它:
- 创建一个新的testing/目录并将旧目录中的文件复制到其中。必须删除旧的testing/目录 - 它基本上已损坏。
- 我的跨目录导入是否使用绝对路径而不是相对路径。
(顺便说一句,我试图追溯我的步骤以重现相关导入错误但无法重现,因此我不确定整个事情的原因或解决方案。)