pkg_resources 关于在资源路径中使用“..”的弃用警告
pkg_resources DeprecationWarning for use of '..' in resource path
在 Python 包中,我有一个数据文件嵌套在 'above' 一个需要它的文件中。例如
package
data
data.csv
utils
util.py
在util.py中,我使用pkg_resources将文件作为流获取;这允许代码 运行 来自源代码并作为软件包安装。
data_stream = pkg_resources.resource_stream(
__name__, os.path.join("..", "data", "data.csv")
)
这工作正常,并允许按预期检索数据文件。
但是,当我 运行 测试使用 util.py 中的代码时,会显示弃用警告,说明 "DeprecationWarning: Use of .. or absolute path in a resource path is not allowed and will raise exceptions in a future release."
但我不确定处理此问题的正确方法是什么?
也许使用 Path 模块会更好,它也是跨平台的。
import os
from pathlib import Path
data_stream = pkg_resources.resource_stream(
__name__, os.path.join(Path(os.curdir())[0], "data", "data.csv")
)
似乎这个问题不仅导致了 DeprecationWarning,而且在从打包的 .egg 文件(而不是 .whl)安装时导致错误 - 以前记录在此处:package data not installed from python .egg file
我解决这两个问题的方法是将 data_resources.py 模块放置在与数据文件相同的级别,它定义了磁盘资源的数据结构。这避免了必须使用其中带有“..”的路径。
例如
package
data
data_resources.py
data.csv
utils
util.py
其中 data_resources.py 可能包含如下内容:
data_stream = pkg_resources.resource_stream(__name__, "data.csv")
data_df = pd.read_csv(data_stream)
和util.py可以简单地导入:
from package.data.data_resources import data_df
我假设这是对这种情况更正确的方法,因为它抑制了 DeprecationWarnings,并允许从 .egg 和 .whl 文件安装。
在 Python 包中,我有一个数据文件嵌套在 'above' 一个需要它的文件中。例如
package
data
data.csv
utils
util.py
在util.py中,我使用pkg_resources将文件作为流获取;这允许代码 运行 来自源代码并作为软件包安装。
data_stream = pkg_resources.resource_stream(
__name__, os.path.join("..", "data", "data.csv")
)
这工作正常,并允许按预期检索数据文件。
但是,当我 运行 测试使用 util.py 中的代码时,会显示弃用警告,说明 "DeprecationWarning: Use of .. or absolute path in a resource path is not allowed and will raise exceptions in a future release."
但我不确定处理此问题的正确方法是什么?
也许使用 Path 模块会更好,它也是跨平台的。
import os
from pathlib import Path
data_stream = pkg_resources.resource_stream(
__name__, os.path.join(Path(os.curdir())[0], "data", "data.csv")
)
似乎这个问题不仅导致了 DeprecationWarning,而且在从打包的 .egg 文件(而不是 .whl)安装时导致错误 - 以前记录在此处:package data not installed from python .egg file
我解决这两个问题的方法是将 data_resources.py 模块放置在与数据文件相同的级别,它定义了磁盘资源的数据结构。这避免了必须使用其中带有“..”的路径。
例如
package
data
data_resources.py
data.csv
utils
util.py
其中 data_resources.py 可能包含如下内容:
data_stream = pkg_resources.resource_stream(__name__, "data.csv")
data_df = pd.read_csv(data_stream)
和util.py可以简单地导入:
from package.data.data_resources import data_df
我假设这是对这种情况更正确的方法,因为它抑制了 DeprecationWarnings,并允许从 .egg 和 .whl 文件安装。