2016-09-11 134 views
-2

我已经阅读过文档,但我仍然无法完全理解Python如何处理导入。我得到以下错误:Python导入错误:没有名为Flask.myMethod的模块

我已经检查过的圆形进口(SERV进口class_definitions:from class_definitions import *以及其他一些典型的Python模块)class_definitions.py只有进口泡菜 我试图重建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 
+0

你的'PYTHONPATH'('print sys.path')是什么? – zvone

+0

我得看看咸菜的文档。我一直在虚拟机上开发,并决定将开发工作转移到目标平台上。所以绝对路径改变了,但不是相对的。 –

回答

0

看来,你必须在这个路径中的PY文件:

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

而且你要导入一些命名Flask.class_definitions当你pickle.load

由于class_definitions不在Flask包中,因此失败。

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

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

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

相关问题