ソフトウェアのローカルディレクトリの構造の定式化: pkgstruct
以前の記事で、ローカルディレクトリの構造の定型化についての試みに触れた。要は、一つのディレクトリの下に、bin
,lib
, share
, var
,....と典型的なディレクトリ構造をつくって、データファイルを適切に分類保存していくのを助けるpython
コードを書いた話。
これをより簡単に使えるようにするため、多少名前を変えてpythonモジュール化してPyPIに登録した。
ファイル置き場
インストール方法
インストール例
% pip install pkgstruct
% 使い方
名前以外は以前の記事から変更なしです。
使用例
import pkgstruct
...
Pkg_info = pkgstruct.PkgStruct(script_path=sys.argv[0])
# pkg_info.dump(relpath=False, with_seperator=True)
...
pkg_info.make_subdirs(‘pkg_sysconfdir’, 0o755, True, ‘kivy’)
os.environ[‘KIVY_HOME’] = pkg_info.concat_path(‘pkg_sysconfdir’, ‘kivy’)
....
実行スクリプト名からトップディレクトリを推測して、その下にディレクトリを作成したり、パス名を構築したりするメンバー関数があります。GNU Coding StandardやFilesystem Hierarchy Standard(FHS)に準じたサブディレクトリ構成を作成するのに役立ちます。たとえば、トップディレクトリが、~/tmp/py_working_tool
で、ソフトウェアパッケージ名がpy_working_tool
だった場合には、下記のようなキーワードで、サブディレクトリが作成できます。
-
bindir
: ~/tmp/py_working_tool/bin -
datadir
: ~/tmp/py_working_tool/share -
sysconfdir
: ~/tmp/py_working_tool/etc -
localstatedir
: ~/tmp/py_working_tool/var -
runstatedir
: ~/tmp/py_working_tool/var/run -
tmpdir
: ~/tmp/py_working_tool/tmp
パッケージ名付きのディレクトリパスを得るキーワードは下記です。
-
pkg_datadir
: ~/tmp/py_working_tool/share/py_working_tool -
pkg_sysconfdir
: ~/tmp/py_working_tool/etc/py_working_tool -
pkg_cachedir
: ~/tmp/py_working_tool/var/cache/py_working_tool -
pkg_statedatadir
: ~/tmp/py_working_tool/var/lib/py_working_tool -
pkg_logdir
: ~/tmp/py_working_tool/var/log/py_working_tool -
pkg_spooldir
: ~/tmp/py_working_tool/var/spool/py_working_tool
dump()
といコマンドで全キーワードを確認できます。
‘pkg_name': py_working_tool
‘pkg_path': ~/tmp/py_working_tool
----------------------------------------------------------------------
‘base_script': ~/tmp/py_working_tool/lib/python/pkgstruct.py
----------------------------------------------------------------------
‘script_mnemonic': pkgstruct
‘script_path': ~/tmp/py_working_tool/lib/python/pkgstruct.py
‘script_location': ~/tmp/py_working_tool/lib/python
‘script_basename': pkgstruct.py
----------------------------------------------------------------------
‘prefix': ~/tmp/py_working_tool
----------------------------------------------------------------------
‘exec_user’: ********
----------------------------------------------------------------------
'exec_prefix': '${prefix}'
'bindir': '${prefix}'/bin
'datarootdir': '${prefix}'/share
'datadir': '${prefix}'/share
'sysconfdir': '${prefix}'/etc
'sharedstatedir': '${prefix}'/com
'localstatedir': '${prefix}'/var
'include': '${prefix}'/include
'libdir': '${prefix}'/lib
'srcdir': '${prefix}'/src
'infodir': '${prefix}'/share/info
'runstatedir': '${prefix}'/var/run
'localedir': '${prefix}'/share/locale
'lispdir': '${prefix}'/emacs/lisp
'docdir': '${prefix}'/doc/py_working_tool
'htmldir': '${prefix}'/doc/py_working_tool
'dvidir': '${prefix}'/doc/py_working_tool
'pdfdir': '${prefix}'/doc/py_working_tool
'psdir': '${prefix}'/doc/py_working_tool
'mandir': '${prefix}'/share/man
'man0dir': '${prefix}'/share/man/man0
'man1dir': '${prefix}'/share/man/man1
'man2dir': '${prefix}'/share/man/man2
'man3dir': '${prefix}'/share/man/man3
'man4dir': '${prefix}'/share/man/man4
'man5dir': '${prefix}'/share/man/man5
'man6dir': '${prefix}'/share/man/man6
'man7dir': '${prefix}'/share/man/man7
'man8dir': '${prefix}'/share/man/man8
'man9dir': '${prefix}'/share/man/man9
'manndir': '${prefix}'/share/man/mann
'sbindir': '${prefix}'/sbin
'bootdir': '${prefix}'/boot
'devdir': '${prefix}'/dev
'mediadir': '${prefix}'/media
'mntdir': '${prefix}'/mnt
'optdir': '${prefix}'/opt
'tmpdir': '${prefix}'/tmp
'xmldir': '${prefix}'/etc/xml
'etcoptdir': '${prefix}'/etc/opt
'cachedir': '${prefix}'/var/cache
'statedatadir': '${prefix}'/var/lib
'lockdir': '${prefix}'/var/lock
'logdir': '${prefix}'/var/log
'spooldir': '${prefix}'/var/spool
'statetmpdir': '${prefix}'/var/tmp
'user_home': '${prefix}'/Users/********
'home': '${prefix}'/Users/********
'homedir': '${prefix}'/Users
----------------------------------------------------------------------
'pkg_datadir': '${prefix}'/share/py_working_tool
'pkg_sysconfdir': '${prefix}'/etc/py_working_tool
'pkg_runstatedir': '${prefix}'/var/run/py_working_tool
'pkg_include': '${prefix}'/include/py_working_tool
'pkg_libdir': '${prefix}'/lib/py_working_tool
'pkg_srcdir': '${prefix}'/src/py_working_tool
'pkg_tmpdir': '${prefix}'/tmp/py_working_tool
'pkg_xmldir': '${prefix}'/etc/xml/py_working_tool
'pkg_cachedir': '${prefix}'/var/cache/py_working_tool
'pkg_statedatadir': '${prefix}'/var/lib/py_working_tool
'pkg_lockdir': '${prefix}'/var/lock/py_working_tool
'pkg_logdir': '${prefix}'/var/log/py_working_tool
'pkg_spooldir': '${prefix}'/var/spool/py_working_tool
'pkg_statetmpdir': '${prefix}'/var/tmp/py_working_tool
----------------------------------------------------------------------