Обрабатывает ли 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]"
,