我在使用Python的泡菜时遇到了问题。我需要通过将文件路径提供给importlib.util来加载一些Python模块,如下所示:
(\w+ (=|>|<|>=|<=|!=) \w+)
我想从加载的模块中实例化一些对象并将它们序列化以供以后使用,但是当我尝试时:
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)
我明白了: _pickle.PicklingError:不能腌制:导入模块&#39; custom&#39;失败
如果我尝试挑选通过import语句导入的对象,则不会发生这种情况。我怎么能绕过这个?
答案 0 :(得分:1)
使其工作最简单的方法是通过以下方式将模块手动添加到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
答案 1 :(得分:0)
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)