Posted at

Hyで書いたライブラリをPyPIに登録する備忘録

More than 1 year has passed since last update.

これを作った時に試行錯誤した備忘録です.

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が必要です.