为包装器模块指定二进制路径的最佳方法

时间:2013-05-20 10:52:06

标签: python

我编写了一个包装外部二进制文件功能的模块。

例如,我将ls程序包装到python模块my_wrapper.py

import my_wrapper
print my_wrapper.ls('some_directory/')
# list files in some_directory

并在my_wrapper.py中执行:

# my_wrapper.py

PATH_TO_LS = '/bin/ls'

def ls(path):
    proc = subprocess.Popen([PATH_TO_LS, path], ...)
    ...
    return paths

(当然,我不包装ls,而是包装其他二进制文件)

二进制文件可能安装了任意位置,如/usr/bin//opt/,甚至可能与python脚本(./binaries/

位于同一位置

问题:

什么是最干净的(从用户的角度来看)设置二进制路径的方法?

  • 用户是否应在脚本开头指定my_wrapper.PATH_TO_LS = ...或调用某些my_wrapper.set_binary_path(path)
  • 也许最好在env中指定它,而包装器会在os.environ找到它?
  • 如果包装器以egg形式分发,我可以在安装期间要求可执行文件已经存在于系统中(见下文)吗?

鸡蛋示例:

# setup.py
setup(
    name='my_wrapper',
    requires_binaries=['the_binary'] # <--- require that the binary is already 
                                     #      installed and on visible
                                     #      on execution path
)

easy_install my_wrapper BINARY_PATH=/usr/local/bin/the_binary

1 个答案:

答案 0 :(得分:0)

使用合理的默认值创建“配置对象”。允许使用者根据需要修改值。接受配置对象实例到您的功能,采用您默认创建的实例。