外部バイナリの機能をラップするモジュールを作成します。
たとえば、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