如何在Python包中访问pickle数据

4

我正在尝试在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找不到我的pickle文件。是的,我在setup.py中设置了include_package_data = True,并且pickle文件通过MANIFEST.in文件加载。

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


你尝试过使用相对路径,例如"./data.pkl"吗? - Angelo
这个包里有pickle吗?(每个包都只是一个.zip.tar.gz归档文件,您可以列出它)。安装包后它是否已安装? - phd
指定相对路径(./data.pkl)会产生相同的错误。在安装后,pickle文件位于包中。 - ProteinGuy
1个回答

1

需要指定相对于源代码的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'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接