概要
PyPI には登録されていないが,GitHub では公開されているライブラリを依存関係に含める方法.
また,setup.py
から requirements.txt
を参照している場合の対応方法について忘備録としてまとめる.
requirements.txt
GitHub リポジトリの URL が https://github.com/rgmining/common の場合,
requirements.txt には,
-e git+https://github.com/rgmining/common.git#egg=rgmining_common-0.9.0
のように書く.#egg=
以降は <パッケージ名>-<バージョン> という書式にするようだ.
また,pip-tools
を使って requirements.txt を生成している場合,
requirements.in
には上記と同じ文字列を記入する.
setup.py
今まで,setup.py
では下記のようにrequirements.txt
の内容をinstall_requires
に渡していた.
from setuptools import setup, find_packages
def load_requires_from_file(filepath):
with open(filepath) as fp:
return [pkg_name.strip() for pkg_name in fp.readlines()]
setup(
# その他の項目は省略
install_requires=load_requires_from_file("requirements.txt")
)
requirements.txt
にURLが含まれている場合は,もう少し改良してパッケージ名だけをリストアップする.
def take_package_name(name):
if name.startswith("-e"):
return name[name.find("=")+1:name.rfind("-")]
else:
return name.strip()
def load_requires_from_file(filepath):
with open(filepath) as fp:
return [take_package_name(pkg_name) for pkg_name in fp.readlines()]
また,URL部分はsetup
関数のキーワード引数dependency_link
に渡す.
def load_links_from_file(filepath):
res = []
with open(filepath) as fp:
for pkg_name in fp.readlines():
if pkg_name.startswith("-e"):
res.append(pkg_name.split(" ")[1])
return res
setup(
# 他の項目は省略
install_requires=load_requires_from_file("requirements.txt"),
dependency_links=load_links_from_file("requirements.txt"),
)
以上で,python setup.py test
などとすると,GitHubからパッケージを用意してテストを実行できる.