web-dev-qa-db-ja.com

pipはsetuptools / distributeベースのソースからのextras_requiresを処理しますか?

Setup.pyと extras_requires 行を含むパッケージ "A"があります。

extras_require = {
    'ssh':  ['paramiko'],
},

そして、utilに依存するパッケージ「B」:

install_requires = ['A[ssh]']

python setup.py installを使用するパッケージB、setuptools.command.easy_install内部で、extras_requiresは正しく解決され、paramikoがインストールされています。

ただし、pip /path/to/Bまたはpip hxxp://.../b-version.tar.gz、パッケージAはインストールされていますが、paramikoはインストールされていません。

Pipは「ソースからインストールする」ため、なぜこれが機能しないのかはよくわかりません。 Bのsetup.pyを呼び出してから、BとAの両方の依存関係を解決してインストールする必要があります。

これはpipで可能ですか?

39
dsully

これは、2012年2月にリリースされたpip 1.1(この質問が行われた1年後)からサポートされています。

18
TryPyPy

を使用しております setup.pyおよびpipを使用して、パッケージの開発依存関係を管理します。ただし、pipの新しいバージョンが必要です(現在、1.4.1を使用しています)。

#!/usr/bin/env python
from setuptools import setup
from myproject import __version__ 

required = [
    'gevent',
    'flask',
    ...
]

extras = {
    'develop': [
        'Fabric',
        'nose',
    ]
}

setup(
    name="my-project",
    version=__version__,
    description="My awsome project.",
    packages=[
        "my_project"
    ],
    include_package_data=True,
    Zip_safe=False,
    scripts=[
        'runmyproject',
    ],
    install_requires=required,
    extras_require=extras,
)

パッケージをインストールするには:

$ pip install -e . # only installs "required"

開発するには:

$ pip install -e .[develop] # installs develop dependencies
37
aaronfay

@aaronfayからの答えは完全に正しいですが、zshを使用している場合、インストールコマンドpip install -e .[dev]pip install -e ".[dev]"に置き換える必要があることを指摘しておくとよいでしょう。

6
cantdutchthis