python - 如何访问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 = True
并setup.py
通过文件加载泡菜MANIFEST.in
文件。
我曾尝试加载 pickle 文件__init__.py
或指定完整路径 ( package/data.pkl
),但这些都不起作用。
解决方案
必须指定 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'))
推荐阅读
- python - 在 PySpark 循环中指定列
- javascript - 编辑模式下材料表内的 Reactjs 日期列本地化
- c++ - 有没有办法从 c++ 函数中的 int 变量返回浮点数?
- google-maps - 谷歌地图 KML 信息窗口
- html - 如何在html中居中图像和文本
- excel - 希望将一组数据从 excel 工作表导出到带有 VBA 的制表符描述的文本文件
- php - 无法为 Azure Linux 应用服务设置 PHP 设置
- c++ - 构建 ASP.NET Core 和 C++ 二进制文件的 Dockerfile
- java - 如何使用并行计算从 BufferedImage 中获取 RGB 像素的 int[]?
- django - 如何从视图 [django] 向 mqtt 发布消息?