Help us understand the problem. What is going on with this article?

pip 18.1 から setup.py の install_requires に URL が書けるようになった

More than 1 year has passed since last update.

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 の一部です:

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.pypip 18.0 以前のヴァージョンではエラーになってしまうので、使える状況を選ぶ状態ではあると思います。

参考文献


以下、付録:

18.0 以前の場合

pip 18.0 以前では install_requires 引数に書いたパッケージ名に対応する URL を dependency_links 引数に書く必要がありました。この書き方にもいくつか細かいルールがあり、更にこの setup.py を使う際にも pip install コマンドに --process-dependency-links というオプションを渡さないとうまく動かない (しかも DEPRECATION の警告が出る) という状態でした。

setup.py
# -*- 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'
    ]
)
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away