You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于pyproject.toml setuptools实现二进制文件动态定位同目录配置文件

解决Python项目二进制文件动态定位同目录配置文件的问题

核心思路

运行二进制文件时,当前工作目录并非Python脚本所在的site-packages/ranchercli目录,因此相对路径无法定位到配置文件。解决方案是通过代码动态获取脚本所在目录,拼接出配置文件的绝对路径,同时确保安装时配置文件被正确部署到对应位置。

步骤1:修改Python代码,动态生成配置文件路径

在ranchercli.py中,替换原本依赖命令行传入相对路径的逻辑,改为自动获取脚本所在目录并拼接配置文件路径:

import os
from pathlib import Path
import argparse

# 获取当前脚本所在的绝对目录
script_dir = Path(__file__).parent.resolve()
# 拼接配置文件的绝对路径
default_project_file = script_dir / "ranchercli-projects.json"

# 处理命令行参数,默认使用动态生成的配置文件路径
parser = argparse.ArgumentParser()
parser.add_argument("--projectfile", default=str(default_project_file))
parser.add_argument("--ns")
parser.add_argument("--env")
parser.add_argument("--refresh", action="store_true")
args = parser.parse_args()

# 检查配置文件是否存在
if not os.path.exists(args.projectfile):
    raise FileNotFoundError(f"--projectfile={args.projectfile} not found")

这样不管二进制文件在哪个目录运行,都能准确找到同目录下的配置文件。

步骤2:确保配置文件被正确打包安装

在pyproject.toml中配置package-data,让setuptools把配置文件打包到安装目录:

[project]
name = "ranchercli"
version = "0.1.0"
# 其他项目基础配置(如作者、依赖等)

[tool.setuptools.package-data]
ranchercli = ["ranchercli-projects.json"]

[tool.setuptools.packages.find]
where = ["."]  # 若代码在src目录下则改为["src"],根据实际项目结构调整

验证效果

重新打包并通过pip安装项目后,直接运行ranchercli.exe无需手动指定配置文件路径,代码会自动定位到site-packages/ranchercli/ranchercli-projects.json,在任意目录运行都能正常访问。

内容的提问来源于stack exchange,提问作者MortenB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:32:15