Обрабатывает ли pip extras_requires из setuptools/ распространяет исходники?

У меня есть пакет "A" с setup.py и строка extras_requires, как:

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

И пакет "B", который зависит от util:

install_requires = ['A[ssh]']

Если я бегу python setup.py install на пакете B, который использует setuptools.command.easy_install под капотом extras_requires правильно решен, и парамико установлено.

Тем не менее, если я бегу pip /path/to/B или же pip hxxp://.../b-version.tar.gz, пакет А установлен, но paramiko нет.

Поскольку pip "устанавливается из исходного кода", я не совсем уверен, почему это не работает. Следует вызвать setup.py для B, а затем разрешить и установить зависимости как B, так и A.

Возможно ли это с помощью пипа?

2 ответа

Решение

Это поддерживается начиная с версии 1.1, которая была выпущена в феврале 2012 года (через год после того, как был задан этот вопрос).

Мы используем 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

Ответ от @aaronfay полностью правильный, но было бы неплохо отметить, что если вы используете zsh что команда установки pip install -e .[dev] должен быть заменен pip install -e ".[dev]",

Другие вопросы по тегам