Zla*_*ica 5 python pickle python-importlib
我在使用 Python 的泡菜时遇到了一个问题。我需要通过将它们的文件路径提供给 importlib.util 来加载一些 Python 模块,如下所示:
import importlib.util
spec = importlib.util.spec_from_file_location('custom', 'C:\path\to\.py\file.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
Run Code Online (Sandbox Code Playgroud)
我想从加载的模块中实例化一些对象并将它们序列化以供以后使用,但是当我尝试时:
pickle.dump(module.ObjectFromModule(), open('C:\object\location\obj.p', 'wb'))
Run Code Online (Sandbox Code Playgroud)
我明白了:_pickle.PicklingError: Can't pickle : import of module 'custom' failed
如果我尝试对通过 import 语句导入的对象进行酸洗,则不会发生这种情况。我怎样才能绕过这个?
小智 5
使其工作的最简单方法是按以下方式手动将模块添加到 sys.module 中:
import importlib.util
import sys
spec = importlib.util.spec_from_file_location('custom', 'C:\path\to\.py\file.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
sys.modules['custom'] = module
Run Code Online (Sandbox Code Playgroud)
Pickle 取决于模块路径。因此,您应该确保该模块custom位于您的sys.path.
在类似的应用程序中,我可以通过执行以下操作来使其工作:
file_path = 'C:\path\to\.py\file.py'
dir_name = os.path.dirname(file_path)
if dir_name not in sys.path:
sys.path.append(dir_name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |