ソフトウェアでのローカルディレクトリの構造の定式化のためのpythonモジュール：pkgstruct

# ソフトウェアのローカルディレクトリの構造の定式化: pkgstruct

以前の記事で、[ローカルディレクトリの構造の定型化](https://qiita.com/Nanigashi_Uji/items/ecb56efa7e61a565faa7#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%AE%E5%AE%9A%E5%9E%8B%E5%8C%96pkg_structurepy)についての試みに触れた。要は、一つのディレクトリの下に、`bin`,`lib`, `share`, `var`,....と典型的なディレクトリ構造をつくって、データファイルを適切に分類保存していくのを助ける`python`コードを書いた話。

https://qiita.com/Nanigashi_Uji/items/ecb56efa7e61a565faa7#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%AE%E5%AE%9A%E5%9E%8B%E5%8C%96pkg_structurepy

これをより簡単に使えるようにするため、多少名前を変えてpythonモジュール化して[PyPI](https://pypi.org/project/pkgstruct/)に登録した。

# ファイル置き場

- [PyPI](https://pypi.org/project/pkgstruct/)
- [github](https://github.com/nanigashi-uji/pkgstruct)
- [gitlab](https://gitlab.com/nanigashi_uji/pkgstruct)

# インストール方法

```bash:インストール例
% pip install pkgstruct
```

% 使い方

名前以外は[以前の記事](https://qiita.com/Nanigashi_Uji/items/ecb56efa7e61a565faa7#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%AE%E5%AE%9A%E5%9E%8B%E5%8C%96pkg_structurepy)から変更なしです。

```python:使用例
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
----------------------------------------------------------------------
```