本文介绍了如何在一个包中打开一个文件,用portlib?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将我正在开发的一个简单的Web抓取应用程序的后端放到一个包中,但该应用程序依赖于从一个已腌制的Python对象加载,而我无法使用portlib将该对象加载到文件中。以前,当我将所有代码放在一个文件中,并依赖于Open()时,一切都运行得很好,但现在我在导入包时收到一个错误。出现此错误后,我尝试使用Importlib加载该文件,但无法使其工作。
我按照类似问题的答案中的步骤操作:How to read a (static) file from inside a Python package?。
我的包中的文件结构是:
mypackage __init__.py parse.py search.py categories categories.pickle generate_categories_if_corrupted.pyinit.py:
的内容 from %mymodule% import search发生错误的代码:
import importlib.resources as resources from pickle import load from . import categories try: with resources.open_binary(categories, "categories.pickle") as cat: CATS = load(cat) except FileNotFoundError: raise FileNotFoundError("")错误:
Traceback (most recent call last): File "%mypackage%parse.py", line 15, in <module> with resources.open_binary(categories, "categories.pickle") as cat: File "C:Users\%me%AppDataLocalProgramsPythonPython38libimportlibesources.py", line 92, in open_binary _check_location(package) File "C:Users\%me%AppDataLocalProgramsPythonPython38libimportlibesources.py", line 82, in _check_location raise FileNotFoundError(f'Package has no location {package!r}') FileNotFoundError: Package has no location <module '%mypackage%.categories' (namespace)> During handling of the above exception, another exception occurred: ## just a FileNotFoundError with an error message, as expected.如何修复此问题?这是我第一次尝试用Python将我的代码打包。
提前感谢您的答复。
推荐答案根据this answer on a related question(您可能希望提升此答案),要使importlib.resources完成其工作,包中必须有__init__.py文件。
所以在您的情况下,我认为应该有一个mypackage/categories/__init__.py文件(像往常一样,该文件可以保留为空,但它必须存在)。
更多推荐
如何在一个包中打开一个文件,用portlib?
发布评论