尝试使用pickle加载文件时,我收到ImportError: No module named application_mgmt
。
奇怪的是,同一个文件可以加载没有问题形成一个不同的功能,他们甚至都使用相同的get_file方法和所有。同样奇怪的是,我可以从函数中加载任何其他文件。
我尝试将这些功能移到另一个类/文件中。清除并重新填充已保存的文件但似乎没有任何效果。
保存文件中的对象:
class Application():
def __init__(self,name,focus=False):
self.name = name
self.focus = focus
self.prod_score = 5
self.display_name = name
self.color = "none"
导致错误的函数:
def check_meta_info(self, app_name):
self.get_file("saved_meta_data")
文件处理功能:
def get_file(self, file_name):
path = "back/saved_data/%s" % (file_name)
try:
with open(path,'rb') as saved_file:
saved_list = pickle.load(saved_file)
saved_file.close()
return saved_list
except IOError:
#stuff
日志:
Traceback (most recent call last):
File "<stdin>", line 400, in <module>
File "<stdin>", line 221, in app_meta_info
File "<stdin>", line 313, in check_meta_info
File "<stdin>", line 358, in get_file
ImportError: No module named application_mgmt
shell returned 1
功能有效,但调用相同的文件类:
def add_meta_info(self, new_application):
new_meta = Application(new_application) # creates obj
saved_meta_info = self.get_file("saved_meta_data")
for metas in saved_meta_info:
if new_meta.name == metas.name:
return False
saved_meta_info.append(new_meta)
self.save_file(saved_meta_info,"saved_meta_data")
del new_meta
文件结构:
.
├── active_screen.glade
├── active_screen.py
├── back
│ ├── application_mgmt.py
│ ├── application_mgmt.pyc
│ ├── bash
│ │ ├── get_active_window.sh
│ │ ├── prosessScript.sh
│ │ └── test_lock.sh
│ ├── bash_schedular.py
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── saved_data
│ │ ├── first_time_builder.py
│ │ ├── saved_active_data
│ │ ├── saved_background_data
│ │ ├── saved_ignore_data
│ │ └── saved_meta_data < HIM
答案 0 :(得分:1)
查看错误日志,我认为您的问题与pickle加载无关。 我不知道他为什么要导入application_mgmt - get_file的哪一行是358? - 但可能由以下原因导致ImportError:
忘记后面文件夹中的__init__文件。没有它,文件夹是不可导入的。如果缺少,请创建一个空的。
Python路径问题:要检查是否存在问题,请尝试在get_file方法的开头添加它。
import sys
sys.path.append('/path/to/the/back/module/')
循环导入:如果在application_mgmt.py和其他文件之间找到任何内容,请尝试重构代码以避免它们。
希望这有帮助。