How to open a file in a package with importlib?(如何在一个包中打开一个文件,用portlib?)
本文介绍了如何在一个包中打开一个文件,用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%AppDataLocalProgramsPythonPython38libimportlib
esources.py", line 92, in open_binary
_check_location(package)
File "C:Users\%me%AppDataLocalProgramsPythonPython38libimportlib
esources.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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:如何在一个包中打开一个文件,用portlib?
基础教程推荐
猜你喜欢
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
