pip
コマンドのヴァージョン 18.1
から setup.py
に記述する setuptools.setup
関数の install_requires
引数に、依存パッケージの URL を直接記述できるようになったようです。
18.0
以前も PyPl 以外の場所から依存パッケージを取得する場合 requirements.txt
には URL を記述できましたが、setup.py
で同じようなことをすると、色々と面倒でした。
install_requires
引数の要素には、通常 PyPl のパッケージ名(+ヴァージョン指定)を書きますが、今回の変更で、 install_requires
の要素に以下の記述ができるようになりました:
(パッケージ名) @ (URL)
下記の例は gitlab.com
に置いた osoken/private-package
というリポジトリにある private-package
というパッケージに依存したパッケージの setup.py
の一部です:
# -*- coding: utf-8 -*-
from setuptools import setup
setup(
... (中略) ...
install_requires=[
'private-package @ git+ssh://git@gitlab.com/osoken/private-package.git'
]
)
URL には、この例のような VCS のリモートリポジトリの URL や、下記のようなアーカイブの URL が書けます:
pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686
この変更は PEP 508 に従ったもののようで、記述できるものの文法もここに載っています。
PyPl 外のパッケージが混ざっていたとしても、大体の場合は requirements.txt
に書いて pip install -r requirements.txt
したり、特定のパッケージだけ手動で依存関係を解消したりすれば問題にはなりませんが、今回の変更で setup.py
だけで統一的に依存関係が解消できるようになりました。ただ、上記の記述が混じった setup.py
は pip 18.0
以前のヴァージョンではエラーになってしまうので、使える状況を選ぶ状態ではあると思います。
参考文献
- Un-deprecate
--process-dependency-links
until an alternative is implemented · Issue #4187 · pypa/pip - setup.pyのdependency_linksの書き方 - 今川館
- PEP 508 -- Dependency specification for Python Software Packages | Python.org
以下、付録:
18.0 以前の場合
pip 18.0
以前では install_requires
引数に書いたパッケージ名に対応する URL を dependency_links
引数に書く必要がありました。この書き方にもいくつか細かいルールがあり、更にこの setup.py
を使う際にも pip install
コマンドに --process-dependency-links
というオプションを渡さないとうまく動かない (しかも DEPRECATION
の警告が出る) という状態でした。
# -*- coding: utf-8 -*-
from setuptools import setup
setup(
... (中略) ...
install_requires=[
'private-package'
],
dependency_links=[
'git+ssh://git@gitlab.com/osoken/' +
'private-package.git#egg=private_package-1.0.0'
]
)