web-dev-qa-db-ja.com

Python wheelファイルの依存関係を一覧表示する

Python wheelファイル:psutil-5.4.5-cp26-none-linux_x86_64.whl

このホイールの依存関係をリストするにはどうすればよいですか?

14
guettli

前述のように、.whlファイルは単なるZipアーカイブです。それらを開いて、METADATAファイル内を移動するだけです。

ただし、この手動プロセスを少し簡単にするツールがあります。 pkginfo を使用できます。これはpipでインストールできます。

CLIの使用法:

$ pip install pkginfo
$ pkginfo -f requires_dist psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]

APIの使用:

>>> import pkginfo
>>> wheel_fname = "psutil-5.4.5-cp27-none-win32.whl"
>>> metadata = pkginfo.get_metadata(wheel_fname)
>>> metadata.requires_dist
[u"enum34 ; extra == 'enum'"]
15
samu

私はちょうど横になっていたホイールパッケージを(gunzipではなく)解凍しようとしました。 packagename-version.dist-info/METADATAファイルにはRequires-Dist:からコンパイルされた要件を含むエントリsetup.py

5

Wheelファイルを別の仮想環境にインストールして、インストールされている他のすべてのパッケージを確認できます。

3
SHIVAM JINDAL

以下は、外部ツール(unzip、gzipなど)を必要としない最小限のスニペットです。そのため、* nix/windowsの両方で動作します。

wheeldeps.py:

import argparse
from zipfile import ZipFile

parser = argparse.ArgumentParser()
parser.add_argument('filename')
args = parser.parse_args()

archive = ZipFile(args.filename)
for f in archive.namelist():
    if f.endswith("METADATA"):
        for l in archive.open(f).read().decode("utf-8").split("\n"):
            if 'requires-dist' in l.lower():
                print(l)

例:

> python wheeldeps.py psutil-5.4.5-cp27-cp27m-win_AMD64.whl
Requires-Dist: enum34; extra == 'enum'  
0
BPL

UNIXでの一般的な回答: strace を使用します

PIDを見つける:

ps -C psutil
// Output example 1337

プロセスのすべてを追跡する

Sudo strace -p 1337

Straceプロセスの依存関係のみ:

Sudo strace -f -e open -p 1337
0
Cryptopat

これはどこかで見つけた投稿です。私はすべてをコピーして自分自身に電子メールを送ったので、この回答のソースはありませんが、これは役立つかもしれないと思います。誰かがソースを知っている場合、私はこの投稿を削除し、その投稿にリンクします。

Installation
$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
Example usage for pip-compile
Suppose you have a Flask project, and want to pin it for production. Write the following line to a file:

# requirements.in
Flask
Now, run pip-compile requirements.in:

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask
And it will produce your requirements.txt, with all the Flask dependencies (and all underlying dependencies) pinned. Put this file under version control as well and periodically re-run pip-compile to update the packages.

Example usage for pip-sync
Now that you have a requirements.txt, you can use pip-sync to update your virtual env to reflect exactly what's in there. Note: this will install/upgrade/uninstall everything necessary to match the requirements.txt contents.

$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1

Requirements.txtには、パッケージに必要なすべての要件が含まれます。

0
Sam

要件としてpipenvをインストールするpewを使用して仮想環境をインストールするために使用します。 pewを使用すると、exitこれらの特別な仮想環境として削除される一時的な仮想環境をインストールできます。そう...

新しい空の仮想環境を作成し、その場でアクティブにします。

pew mktmpenv -p /usr/bin/python3.6

パッケージをインストールします。

pip install somedistro

ディストリビューションの要件(および要件の要件)を確認してください:

pip list

一時環境を非アクティブ化して削除します。

exit

さらに、一時的な仮想環境は、パッケージングテストで非常に役立ちます。

0
glenfant