问题
I have package "A" with a setup.py and an extras_requires line like:
extras_require = {
'ssh': ['paramiko'],
},
And a package "B" that depends on util:
install_requires = ['A[ssh]']
If I run python setup.py install
on package B, which uses setuptools.command.easy_install
under the hood, the extras_requires
is correctly resolved, and paramiko is installed.
However, if I run pip /path/to/B
or pip hxxp://.../b-version.tar.gz
, package A is installed, but paramiko is not.
Because pip "installs from source", I'm not quite sure why this isn't working. It should be invoking the setup.py of B, then resolving & installing dependencies of both B and A.
Is this possible with pip?
回答1:
This is suppported since pip 1.1, which was released in February 2012 (one year after this question was asked).
回答2:
We use setup.py
and pip
to manage development dependencies for our packages, though you need a newer version of pip
(we're using 1.4.1 currently).
#!/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,
)
To install the package:
$ pip install -e . # only installs "required"
To develop:
$ pip install -e .[develop] # installs develop dependencies
回答3:
The answer from @aaronfay is completely correct but it may be nice to point out that if you're using zsh
that the install command pip install -e .[dev]
needs to be replaced by pip install -e ".[dev]"
.
来源:https://stackoverflow.com/questions/4796936/does-pip-handle-extras-requires-from-setuptools-distribute-based-sources