首页 > 解决方案 > 将包数据设置为 PyPI python 包中命令行参数的默认输入

问题描述

我编写了一个命令行脚本,它需要一个包含在我的 python 包中的 csv 文件(下面的包布局)。我在命令行脚本上使用 argparse,并试图将默认的 csv 文件设置为软件包随附的文件。如何在我的命令行命令中将包中包含的 csv 文件指定为默认 csv 文件?

命令行 Argparse 参数:

parser = ArgumentParser()
parser.add_argument("-d", "--database", help="Database", **default="../data/database.csv"**) ## Help Here

args = parser.parse_args()

包层次结构:

package
 - bin/
    - My_Commandline_Command
 - data/
    - database.csv
 - build/ ...
 - dist/  ...
 - MANIFEST.in
 - README.md
 - setup.py
 - package/
    - __init__.py

错误:

当我在我的开发环境之外安装我的包时,我可以看到数据文件夹,但是,我的命令行脚本抛出一个错误,因为没有找到默认的数据库路径。

标签: pythonparameterspackageargparsepypi

解决方案


正如@hpaulj 建议的那样,您可以将默认设置为None然后专门检查这种情况:

import argparse
from pathlib import Path


parser = argparse.ArgumentParser()
parser.add_argument("-d", "--database", help="Database", default=None)

args = parser.parse_args()

if args.database is None:
    args.database = (Path(__file__).parent / "../data/database.csv").resolve()

这里我们可以__file__用来获取相对位置database.csv


推荐阅读