如何在一个包中打开一个文件,用portlib?

编程入门 行业动态 更新时间:2024-10-10 02:23:26
本文介绍了如何在一个包中打开一个文件,用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.py

init.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?

本文发布于:2023-07-04 09:23:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1022358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:包中   文件   如何在   portlib

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!