【问题标题】:loading data from folder inside package从包内的文件夹加载数据
【发布时间】:2021-06-19 07:11:33
【问题描述】:

我在一个文件夹(比如data_pkl)中有一些.pkl 文件(可安装pip),我想将这些文件加载​​到一些.py 外部包中。但是,我不确定是否关注

  1. 我应该写MANIFEST.in文件
  2. setup.py 文件中是否需要进行任何更改
  3. 是否需要将__init__.py 放入data_pkl 文件夹中
  4. 如何使用包在 python 脚本中导入 .pkl 文件。

编辑: include_package_data=Truesetup.py.

如果设置为 True,这将告诉 setuptools 自动包含它在您的包目录中找到的任何数据文件,这些文件要么受 CVS 或 Subversion 控制,要么由您的 MANIFEST.in 文件指定。这回答了 1 和 2。

【问题讨论】:

标签: python python-3.x pickle python-packaging joblib


【解决方案1】:

.pkl 数据可能是使用pickle python 模块的序列化数据。无法导入。您必须反序列化数据。

import pickle
data = pickle.load(open("data.pkl", "rb"))

正如在其他答案中所说,您可以将其包装在 python 模块中。

# filename: data.py
import pickle

def load_data(filename):
    return pickle.load(open(filename, "rb"))

如果您的.pkl 文件在python 包中,您可以使用pkg_resources 检索它。

import pickle
import pkg_resources

def load_data(resource_name):
    return pickle.load(
        pkg_resources.resource_stream("my_package", resource_name))

在 python >= 3.7 中,可以使用importlib.resources 检索数据以防止使用第三方包。

data = pickle.load(
    importlib.resources.open_binary("my_package.data_folder", "data.pkl"))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多