Список зависимостей файла колеса Python - PullRequest
0 голосов
/ 04 мая 2018

У меня есть файл колеса Python: psutil-5.4.5-cp26-none-linux_x86_64.whl

Как я могу перечислить зависимости, которые есть у этого колеса?

Ответы [ 8 ]

0 голосов
/ 11 марта 2019

Одинарные кавычки не должны добавляться в require_dist.

C:\> `pip install pkginfo` 
C:\> `pkginfo -f requires_dist psutil-5.4.5-cp27-none-win32.whl`
requires_dist: ["enum34; extra == 'enum'"]
0 голосов
/ 12 мая 2018

Я использую для установки своих виртуальных envs с pipenv, который устанавливает pew как требование. pew позволяет вам устанавливать временные виртуальные среды, которые удаляются как exit эти специальные виртуальные среды. Итак ...

Создайте новую пустую виртуальную среду и активируйте ее на лету:

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

Установите пакет:

pip install somedistro

Посмотрите, каковы требования вашего дистрибутива (а также требования требований ...):

pip list

Деактивировать и удалить временную среду.

exit

Кроме того, временные виртуальные среды очень полезны при тестировании пакетов.

0 голосов
/ 13 мая 2018

Общий ответ в unix: используйте strace

Найти пид:

ps -C psutil
// Output example 1337

Отмечу все в процессах

sudo strace -p 1337

Только зависимости процесса Strace:

sudo strace -f -e open -p 1337
0 голосов
/ 10 мая 2018

Это сообщение я где-то нашел. Я скопировал все и написал по электронной почте, поэтому у меня нет источника для этого ответа, но я думаю, что это может помочь. Если кто-нибудь знает источник, я удалю этот пост и свяжу его с этим постом.

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

Require.txt будет иметь все требования, необходимые для пакета.

0 голосов
/ 07 мая 2018

Вот минимальный фрагмент кода, который не требует наличия какого-либо внешнего инструмента (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 голосов
/ 07 мая 2018

Как упоминалось ранее, .whl файлы - это просто ZIP-архивы. Вы можете просто открыть их и покопаться в файле METADATA.

Однако есть инструмент, который может немного облегчить этот ручной процесс. Вы можете использовать pkginfo , который можно установить, просто используя pip.

$ pip install pkginfo
$ pkginfo -f 'requires_dist' psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]
0 голосов
/ 07 мая 2018

Я только что попытался расстегнуть молнию (не пистолет) пакета колес, который лежал вокруг. Файл packagename-version.dist-info/METADATA содержит список Requires-Dist: записей, которые содержат скомпилированные требования из setup.py.

0 голосов
/ 07 мая 2018

Вы можете установить файл wheel в отдельной виртуальной среде, а затем посмотреть, какие все остальные пакеты установлены.

...