pipの依存関係/要件を一覧表示する方法はありますか?


99

インストールを行わずに、インストールされるすべてのパッケージをすばやく確認したいと思いますpip install



1
多分卵黄は助けることができますか?
jadkik94 2012年

この問題のための代替の回答を含む別の質問:stackoverflow.com/questions/41816693/...は
pgmank

回答:


95

受け入れられた回答は、pipの最新バージョンには関連しなくなり、複数のコメントを熟読せずにすぐに回答することはないため、更新された回答を提供します。

これは、PIPのバージョンでテストされました8.1.29.0.110.0.1、および18.1

Linuxで現在のディレクトリを乱雑にすることなく出力を取得するには、

pip download [package] -d /tmp --no-binary :all: -v

-d ダウンロードがファイルを置くべきディレクトリをpipに伝えます。

より良いのは、引数をパッケージ名としてこのスクリプトを使用し、依存関係のみを出力として取得することです。

#!/bin/sh

PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \
| grep Collecting \
| cut -d' ' -f2 \
| grep -Ev "$PACKAGE(~|=|\!|>|<|$)"

こちらからもご利用いただけます


これを使用することの非常に(非常に)大まかな読みrequirements.txt< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
Ian Clark

@ hans-musgraveは、私が以前に気づかなかった別の回答で良い点を示したので、bashスクリプトを更新して、パッケージに一致する行と、行の終わりまたは有効なバージョン指定子の開始のみを除外しました。パッケージ名が含まれています。
jmills 2018年

2
一部のパッケージはバイナリのみを提供するため--no-binary :all:、お勧めできません。ホイールのみを出荷し、sdistを出荷しないプロジェクトは失敗します。
WIM

3
非常に遅くなることができ、すべての依存パッケージのダウンロードとコンパイルまでこの終わり....
ルイ・ヤン

1
これは、すでにインストールされている依存関係をリストしていないことに注意してください(これはOPには問題ありません)。
GPHemsley

66

私のプロジェクトjohnnydepをチェックしてください!

インストール:

pip install johnnydep

使用例:

$ johnnydep requests
name                       summary
-------------------------  ----------------------------------------------------------------------
requests                   Python HTTP for Humans.
├── certifi>=2017.4.17     Python package for providing Mozilla's CA Bundle.
├── chardet<3.1.0,>=3.0.2  Universal encoding detector for Python 2 and 3
├── idna<2.7,>=2.5         Internationalized Domain Names in Applications (IDNA)
└── urllib3<1.23,>=1.21.1  HTTP library with thread-safe connection pooling, file post, and more.

より複雑なツリー:

$ johnnydep ipython 
name                              summary
--------------------------------  -----------------------------------------------------------------------------
ipython                           IPython: Productive Interactive Computing
├── appnope                       Disable App Nap on OS X 10.9
├── decorator                     Better living through Python with decorators
├── jedi>=0.10                    An autocompletion tool for Python that can be used for text editors.
│   └── parso==0.1.1              A Python Parser
├── pexpect                       Pexpect allows easy control of interactive console applications.
│   └── ptyprocess>=0.5           Run a subprocess in a pseudo terminal
├── pickleshare                   Tiny 'shelve'-like database with concurrency support
├── prompt-toolkit<2.0.0,>=1.0.4  Library for building powerful interactive command lines in Python
│   ├── six>=1.9.0                Python 2 and 3 compatibility utilities
│   └── wcwidth                   Measures number of Terminal column cells of wide-character codes
├── pygments                      Pygments is a syntax highlighting package written in Python.
├── setuptools>=18.5              Easily download, build, install, upgrade, and uninstall Python packages
├── simplegeneric>0.8             Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
└── traitlets>=4.2                Traitlets Python config system
    ├── decorator                 Better living through Python with decorators
    ├── ipython-genutils          Vestigial utilities from IPython
    └── six                       Python 2 and 3 compatibility utilities

これをダウンロードして使用しました。すばらしいパッケージです。しかし、パッケージをインストールする必要はありませんか?OPは、インストールを必要としないアプローチを具体的に要求しています。注意することが重要です。
so8 6019

5
@ so860いいえ、パッケージをインストールする必要はありません。それが全体のポイントです、それは隔離された環境で動作します。
WIM

明確にするために:johnnydepそれ自体をインストールすると、依存関係がインストールされます。
GPHemsley

1
@wim:このプロジェクトは純粋な輝きです!大好きです !
Jonathan DEKHTIAR

優しい言葉:)をありがとう@JonathanDEKHTIAR
WIM

17

パッケージがインストールされている場合にのみ、を使用できますpip show <package>Requires:出力の最後にあるファイルを探します。明らかに、これはあなたの要件を破りますが、それでも役立つかもしれません。

例えば:

$ pip --version
pip 7.1.0 [...]
$ pip show pytest
---
Metadata-Version: 2.0
Name: pytest
Version: 2.7.2
Summary: pytest: simple powerful testing with Python
Home-page: http://pytest.org
Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others
Author-email: holger at merlinux.eu
License: MIT license
Location: /home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py

3
これは直接的な要件のみを示しており、すべての推移的な依存関係が欠落しています。そして、それはインストールが必要です。だから、それは本当に質問に答えません。
WIM

15

注:この回答で使用されている機能は2014年廃止され、2015削除されました。現代に当てはまる他の回答をご覧くださいpip

pipで直接取得できる最も近い方法は、--no-install引数を使用することです。

pip install --no-install <package>

たとえば、これはセロリをインストールするときの出力です。

Downloading/unpacking celery                                                                                   
  Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded
  Running setup.py egg_info for package celery

    no previously-included directories found matching 'tests/*.pyc'
    no previously-included directories found matching 'docs/*.pyc'
    no previously-included directories found matching 'contrib/*.pyc'
    no previously-included directories found matching 'celery/*.pyc'
    no previously-included directories found matching 'examples/*.pyc'
    no previously-included directories found matching 'bin/*.pyc'
    no previously-included directories found matching 'docs/.build'
    no previously-included directories found matching 'docs/graffles'
    no previously-included directories found matching '.tox/*'
Downloading/unpacking anyjson>=0.3.1 (from celery)
  Downloading anyjson-0.3.3.tar.gz
  Running setup.py egg_info for package anyjson

Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery)
  Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded
  Running setup.py egg_info for package kombu

Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery)
  Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded
  Running setup.py egg_info for package python-dateutil

Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery)
  Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded
  Running setup.py egg_info for package amqplib

Successfully downloaded celery anyjson kombu python-dateutil amqplib

確かに、これは一時ファイルの形でいくつかの残骸を残しますが、それは目標を達成します。virtualenv(そうあるべきです)でこれを行っている場合、クリーンアップは<virtualenv root>/buildディレクトリを削除するのと同じくらい簡単です。


8
この理由は、メタデータがとは異なり、と言うように、外setup.pyの存在しないということですrpmdpkgどこでその上部とクエリにメタデータのインデックスを構築pipし、pypiそのように動作しません。したがって、各要件を渡す必要があります。

12
試しましたpip --no-install celeryが、エラーが発生しますno such option: --no-install(pip 1.2.1)
パニック大佐2012

4
私は彼が意味したと思いますpip install --no-install celery
エントロピー

23
私のpipバージョン(1.5.4)では、--no-installフラグは非推奨です。
Jian 2014年

4
1.5.4の場合、pip install --download =を使用します。--no-use-wheelセロリ
radtek 2014

-1

pip install <package> --download <path>@radtekのコメントに記載されているように、このコマンドを使用する必要があります。7.0.0(2015-05-21)以降、-no-installがから削除されているためpipです。これにより、必要な依存関係がにダウンロードされ<path>ます。


10
ばかばかしいことに、--download同様に非推奨になりました。標準的なコマンドは、のように見えるpip download <package> -d /tmp --no-binary :all:よう提案によりカードのチート
セシルカレー

-1

もう1つのオプションは、APIを使用してファイルを解析し、代わりにファイルを解析する、これと同様のヘルパースクリプトを使用することです。pip.req.parse_requirementsrequirements.txtdistutils.core.setupsetup.py


-1

@onnovalkeringから別の解決策を引用します:

PyPiは、JSONエンドポイントにパッケージメタデータを提供します。

>>> import requests
>>> url = 'https://pypi.org/pypi/{}/json'
>>> json = requests.get(url.format('pandas')).json()
>>> json['info']['requires_dist']
['numpy (>=1.9.0)', 'pytz (>=2011k)', 'python-dateutil (>=2.5.0)']
>>> json['info']['requires_python']
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'

特定のパッケージバージョンについては、URLにバージョンセグメントを追加します。

https://pypi.org/pypi/pandas/0.22.0/json

また、condaを使用している場合(@ShpielMeisterによって提案されているように)、次を使用できます。

conda info package==X.X.X

特定のバージョンの依存関係を含む情報を表示する、または:

conda info package

そのパッケージのサポートされているすべてのバージョンに関する依存関係を含む情報を表示します。


1
このjsonエンドポイントは信頼できないため、私は反対票を投じました。の例を見るとboto3、requires_distはnullですが、それは確かにメタデータに依存関係があるプロジェクトです。
WIM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.