【问题标题】:Including JSON files as part of Python package将 JSON 文件作为 Python 包的一部分包含在内
【发布时间】:2022-02-08 20:59:21
【问题描述】:

我正在编写一个带有“本地数据库”的包,该包由一个文件夹和带有 json 文件的子文件夹组成。我的 database.py 模块使用它们的相对路径 (DB_PATH) 导入这些文件。安装包时,由于找不到文件,加载失败。有没有办法将这些文件作为包的一部分导入,或者有一种标准的方式来处理这种情况?

我的python代码database.py:

DB_PATH = "./db"


def getIndex():
    filename = f"{DB_PATH}/index.json"

    with open(filename) as f:
        data = json.load(f)

    return data

文件系统:

????package
 ┣????folder
 ┃ ┗????project
 ┃   ┣????db
 ┃   ┃ ┣ ????index.json
 ┃   ┃ ┗????config
 ┃   ┃   ┣ ????conf_1.json
 ┃   ┃   ┣ ????conf_2.json
 ┃   ┃   ┗ ...
 ┃   ┗ ????database.py
 ┗????setup.py

【问题讨论】:

  • 如何安装包?点安装? python setup.py 安装?目标安装文件夹中是否存在文件?
  • @Corralien 我有一个 setup.py 文件并使用 pip install 安装。 setup.py 比 project/ 高两层
  • 通常,使用“./folder”是相对于运行脚本的位置而言的。在您的文件夹结构中,没有与 database.py 级别相同的“db”文件夹。另外,为什么是“db”而不是“database”?
  • 文件夹被称为 db 我的错误。将编辑

标签: python pip package


【解决方案1】:

如果您使用setup.py,请添加以下行:

import glob

setup(
    ...
    data_files=glob.glob('project/db/**')
)

在你的database.py

import os.path

DB_PATH = os.path.join(os.path.dirname(__file__), 'db')

变量__file__包含当前python脚本database.py的绝对路径。使用dirname获取父文件夹,join在路径中添加database目录。

【讨论】:

  • 为了大家的利益,您能解释一下为什么使用os.path.dirname(__file__) 是正确的吗?
  • @Oren_C。我添加了一些解释。现在清楚了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多