首页 > 解决方案 > 如何访问python包中的pickle数据

问题描述

我正在尝试在 PyPI(作为新手)上发布一个包,其中包含存储为 pickle 文件的数据。但我似乎无法读取主代码中的数据。

我的包结构是:

package/
    setup.py
    MANIFEST.in
    package/
        package.py
        __init__.py
        data.pkl

我在 package.py 中的代码有点像这样:

data = pickle.load(open('data.pkl', 'rb'))

def doSomething(data):
    ***code to do something on data***
    return variable

var = doSomething(data)

当我安装包并尝试导入它时,我收到错误:

FileNotFoundError: [Errno 2] No such file or directory: 'data.pkl'

看来我package.py找不到我的泡菜文件。是的,我设置include_package_data = Truesetup.py通过文件加载泡菜MANIFEST.in文件。

我曾尝试加载 pickle 文件__init__.py或指定完整路径 ( package/data.pkl),但这些都不起作用。

标签: pythonsetuptoolspypi

解决方案


必须指定 data.pkl 相对于源代码的路径。这可以使用__file__变量来完成(如此所述)。

以下代码为我解决了它

this_dir, this_filename = os.path.split(__file__)  # Get path of data.pkl
data_path = os.path.join(this_dir, 'data.pkl')
data = pickle.load(open(data_path, 'rb'))

推荐阅读