我正在为虚拟机开发 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/myprog
do 中包含:
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
,我写的,它为您设置配置,并允许您在配置文件中指定默认值以进行命令行解析。