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で可能ですか?
これは、2012年2月にリリースされたpip 1.1(この質問が行われた1年後)からサポートされています。
を使用しております 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]"
に置き換える必要があることを指摘しておくとよいでしょう。