【问题标题】:How to access pickle data in python package [duplicate]如何访问python包中的pickle数据[重复]
【发布时间】:2019-11-28 00:06:52
【问题描述】:

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

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

【问题讨论】:

  • 你试过像“./data.pkl”这样的相对路径吗?
  • 泡菜在包里吗? (每个包都只是您可以列出的.zip.tar.gz 存档)。是包安装后安装的吗?
  • 指定相对路径 (./data.pkl) 会产生相同的错误。安装后pickle在包内。

标签: python setuptools pypi


【解决方案1】:

必须指定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'))

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 2010-10-21
    • 2018-04-14
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多