これを作った時に試行錯誤した備忘録です.
setup.py
の内容やファイルの構成のうち通常のPythonと異なる部分のみ記述しています.
Hyからの使用のみ想定している場合
ファイルの構成
.
├── hoge
│ ├── __init__.hy
│ ├── fuga
│ │ ├── __init__.hy
│ │ └── fugafuga.hy
│ └── hogehoge.hy
└── setup.py
1 directories, 5 files
setup.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import setup
config = {
'install_requires': ['hy'],
'packages': ['fuga', 'fuga.hoge'],
# __init__.pyが無いのでfind_packagesはダメ
'package_data': {
'fuga': ['*.hy'],
'fuga.hoge': ['*.hy'],
},
# 通常は.pyファイルしか含まれないので.hyが含まれるように指定してあげる
}
if __name__ == '__main__':
setup(**config)
Pythonからも使用したい場合
setup.py
でエントリーポイントを設定する場合もこちら
ファイルの構成
.
├── hoge
│ ├── __init__.py # トップレベルのみ .hyではなく.pyに
│ ├── fuga
│ │ ├── __init__.hy
│ │ └── fugafuga.hy
│ └── hogehoge.hy
└── setup.py # setup.pyはおなじでOK
1 directories, 5 files
hoge/__init__.py
import hy as _hy
# import hyでももちろんいい
# hyをimportするとimportフックで.hyをimportできるようになる
その他
PyPIにアップロード
当たり前ですがPythonのときと全く一緒です.ちなみにpython setup.py register
ではなくtwineを使いましょう.setup.py
を使うやり方はTestPyPIでは現役ですが本番PyPIでは現在は使用できません.
PythonとHyを混在させる場合
Pythonのソースがあるところにはもちろん__init__.py
が必要.ちなみにCで書いた拡張を併用する場合も__init__.py
が必要です.