web-dev-qa-db-ja.com

リストpythonパッケージの依存関係をロードせずに?

pythonパッケージAにはB、C、Dが必要です。ロードせずにA→B C Dを一覧表示する方法はありますか?
Requiresメタデータ(yolk -M A)しばしば不完全です、grr。
A.tar/A.Eggをダウンロードして、A/setup.pyを調べることができますが、それらのいくつかはかなりひどいものです。

(少なくとも第1レベルの依存関係を取得することは機械化できると思っていました。98%のソリューションでさえ、ダウンロードをなだめるよりはましです。)

関連する質問: pip-upgrade-package-without-upgrading-dependencies

23
denis

スネークフード

sfood -fuq package.py | sfood-target-files 

依存関係を一覧表示します。

`-f` tells sfood to follow dependencies recursively
`-u` tells sfood to ignore unused imports
`-q` tells sfood to be quiet about debugging information

標準ライブラリからモジュールを除外するには、次を使用できます。

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

すでに述べたように、無視したいディレクトリが他にある場合は、sfood -Iフラグを使用することもできます。

31
unutbu

modulefinder 標準ライブラリから

バージョン2.3の新機能。

このモジュールは、スクリプトによってインポートされたモジュールのセットを判別するために使用できるModuleFinderクラスを提供します。 modulefinder.pyはスクリプトとして実行することもでき、引数としてPythonスクリプトのファイル名を指定します。その後、インポートされたモジュールのレポートが出力されます。

モジュールをロードしないという要件に準拠しているかどうかはわかりません。 ここから

modulefinderは、バイトコード検査を使用して依存関係を見つけるため、調査対象のモジュールをインポートすることによって引き起こされる可能性のある副作用がありません。

PylintまたはGui2exeの使用に関するその他のヒント ここ

13
joaquin

パッケージとは、pipがインストールされたパッケージ(__init__。pyのあるディレクトリではない)を意味する場合、pipと呼ばれるPythonパッケージを使用できます。例:

def get_all_package_dependencies():
    """Return dictionary of installed packages to list of package dependencies."""
    return {
        dist.key: [r.key for r in dist.requires()]
        for dist in pip.get_installed_distributions()
    }