【问题标题】:Python Import Error: No module named Flask.myMethodPython 导入错误:没有名为 Flask.myMethod 的模块
【发布时间】:2016-09-11 07:59:12
【问题描述】:

我已阅读文档,但我仍然无法完全理解 Python 如何处理导入。我收到以下错误:

我检查了循环导入(serv 导入 class_definitions:from class_definitions import * 以及其他一些典型的 python 模块)class_definitions.py 只导入 pickle 我试过重建venv 我将代码合并到这两个文件中,试图让它消失。

我在调试中取得的最大进展是,如果我摆脱了对我在 class_definitions.py 中定义的名为 load_pumps() 的函数的调用,它通常会消失。我可以将函数调用替换为一组表示 load_pumps() 应该返回的数据的虚拟数据,我不会收到此错误。 load_pumps 在整个serv.py 的代码的其他部分中被调用,直到今天早些时候我才收到此错误。有什么想法吗?

Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2000, in __call__
  return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1991, in wsgi_app
response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1567, in handle_exception
reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app
response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in full_dispatch_request
rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1544, in handle_user_exception
reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1639, in full_dispatch_request
rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1625, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/pi/Desktop/barbot/flask-files/serv.py", line 89, in admin
pump_list=load_pumps(),
  File "/home/pi/Desktop/barbot/flask-files/class_definitions.py", line 90, in load_pumps
read_pump_list = pickle.load(file_pump)
  File "/usr/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
  File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1090, in load_global
klass = self.find_class(module, name)
  File "/usr/lib/python2.7/pickle.py", line 1124, in find_class
__import__(module)
ImportError: No module named Flask.class_definitions

文件树看起来像这样

âââ admin_config.cfg
âââ class_definitions.py
âââ class_definitions.pyc
âââ __init__.py
âââ __init__.pyc
âââ lists
â   âââ bac_list.py
â   âââ bac_list.pyc
â   âââ cocktails_all.py
â   âââ cocktails_all.pyc
â   âââ garnishes_all.lst
â   âââ garnishes_selected.lst
â   âââ __init__.py
â   âââ __init__.pyc
â   âââ mixers_all.lst
â   âââ pumps.cfg
â   âââ spirits_all.lst
âââ requirements.txt
âââ serv.py
âââ serv.pyc
âââ templates
âââ admin_console.html

2 directories, 20 files

【问题讨论】:

  • 您的PYTHONPATH (print sys.path) 中有什么内容?
  • 我将不得不进一步研究 pickle 的文档;我一直在虚拟机上进行开发,并决定将开发转移到目标平台。所以绝对路径改变了,但相对路径没有改变。

标签: python flask


【解决方案1】:

你这个路径好像有一个py文件:

"/home/pi/Desktop/barbot/flask-files/class_definitions.py"

当您 pickle.load 时,您正尝试导入名为 Flask.class_definitions 的内容。

这会失败,因为class_definitions 不在Flask 包中。

由于您正在加载泡菜,我会说您在过去某个时间创建泡菜时在Flask 包中有一个class_definitions 模块。

pickle 的工作方式是保存实例时使用的类的确切名称,以便在加载时找到它们并重建实例。如果同时更改代码,pickle 可能会变得不兼容。

有一些方法可以在这种情况下实现兼容性,但我建议至少现在不要在保存泡菜后更改类名和目录结构。

【讨论】:

    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 2016-07-11
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多