维护可安装 UnixAPI 中的路径

维护可安装 UnixAPI 中的路径

我正在为虚拟机开发 Unix 环境下的 API。大多数模块都是用 python 开发的。我对此有几个问题。

在 API 内部,我使用绝对路径,如 '/root/virtman/manager/' 。考虑在任何unix环境中运行这个API,我怎样才能使这个绝对路径对任何操作系统/机器通用。或者我是否应该假设安装 API 的某个位置并在各处提供该路径?

我读了很多文章,但没有得到清晰的了解,所以任何提示/建议都会有帮助。

答案1

如果路径仅指向您调用的可执行文件,则应考虑在安装(/usr/bin//usr/local/bin)期间将链接放在标准位置,并让可执行文件找出调用它们的位置,然后让它们从中派生到任何数据文件的路径。

您将使用以下内容:

/usr/bin/myprog    
/opt/myprog/bin/myprog
/opt/myprog/data/picture_01.img

/usr/bin/myprog一个链接/opt/myprog/bin/myprog/opt/myprog/bin/不应该在您的$PATH.通过 do 设置链接sudo ln -s /opt/myprog/bin/myprog /usr/bin,并在/opt/myprog/bin/myprogdo 中包含:

import sys
import os

base_dir = os.path.realpath(sys.argv[0]).rsplit('/bin/', 1)[0]

/opt/myprog在运行时动态确定


如果 python API 基于某些包含的模块,请确保该模块安装在系统 python 的 PYTHONPATH 搜索路径中,然后您可以import yourapimodule在 python 可执行文件中执行并使用它。


如果这些是可以安装在任何地方的数据文件,请考虑拥有一个您可以读取的配置文件,该文件可以是~/.config/yourapimodule/config.ini,~/.yourapimodule/config.ini~/.yourapimodule.ini.1 (.ini您可以使用其他格式,例如.json,无论您喜欢什么)。

1无耻插件:如果你使用 Pythonargparse来处理命令行参数,那么看看这个包ruamel.appconfig,我写的,它为您设置配置,并允许您在配置文件中指定默认值以进行命令行解析。

相关内容