如何在python包中访问泡菜数据

时间:2019-07-19 02:58:52

标签: python setuptools pypi

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

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

1 个答案:

答案 0 :(得分:0)

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

以下代码为我解决了

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'))
相关问题