微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打包以python编写的代码时,如何与代码一起添加Google驱动器api的json凭据文件?

如何解决打包以python编写的代码时,如何与代码一起添加Google驱动器api的json凭据文件?

我用python编写了一个函数,该函数使用json文件作为Google驱动器API的凭证文件。该功能以google sheet URL作为输入,并借助gspread库绘制图形。如果我必须对该函数进行打包,那么我应该如何包含具有相同路径的json文件来使该函数作为一个软件包工作呢?我也尝试使用data_files和MANIFEST.in文件,但没有用。构建软件包后,我仍然收到错误

No file named credentials.json found

当我使用以下方法测试软件包时:

pip install -e .

我正在使用setuptools打包代码。任何帮助表示赞赏。

解决方法

setuptools具有三种不同的方式来指定应与项目一起打包的数据文件Manifest.indata_filespackage_data。对于源代码树下的配置文件,package_data通常最容易使用。


给出一个非常小的示例项目,如下所示:

.
├───setup.py
└───tmp
    ├───__init__.py 
    └───keys.json

您需要一个至少具有此配置的setup.py文件才能将所有代码和.json文件打包在tmp下:

from setuptools import setup

setup(
    name="tmp",version="0.1.0",packages=["tmp"],package_data={"tmp": ["*.json"]},)

keys.json文件仅包含{"key": "foo"}

从包中解析打包的配置文件的最安全方法是使用importlib.resources来访问它,尤其是其path函数(如果您使用的是python 3.7或更早版本,{{3 }}是等效的pip可安装的反向端口):

tmp/__init__.py

from importlib import resources
import json

def print_keys():
    with resources.path("tmp","keys.json") as foo_path:
        print(json.load(foo_path.open()))

使用pip install -e .安装此软件包后,即可运行:

>>> import tmp
>>> tmp.print_keys()
{'key': 'foo'}

如果您打算使用python打包一段时间,请考虑使用比setuptools(例如importlib_resourcespoetry)更现代的构建后端。他们使体验很多更加令人愉快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。