如何解决打包以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.in
,data_files
和package_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_resources
或poetry)更现代的构建后端。他们使体验很多更加令人愉快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。