J'ai un fichier de roue Python: psutil-5.4.5-cp26-none-linux_x86_64.whl
Comment puis-je lister les dépendances de cette roue?
Comme mentionné précédemment, les fichiers .whl
ne sont que des archives Zip. Vous pouvez simplement les ouvrir et les fouiller dans le fichier METADATA
.
Cependant, il existe un outil qui peut faciliter un peu ce processus manuel. Vous pouvez utiliser pkginfo , qui peut être installé en utilisant simplement pip.
$ pip install pkginfo
$ pkginfo -f 'requires_dist' psutil-5.4.5-cp27-none-win32.whl
requires_dist: ["enum34; extra == 'enum'"]
Je viens d'essayer de décompresser (pas gunzip) un paquet de roue que j'avais traîner. Le fichier packagename-version.dist-info/METADATA
contient une liste d'entrées Requires-Dist:
contenant les conditions requises compilées à partir de setup.py
.
Vous pouvez installer le fichier wheel dans un environnement virtuel distinct, puis rechercher les autres packages installés.
Voici un extrait minimal qui ne vous oblige à avoir aucun outil externe (unzip, gzip ou similaire), il devrait donc fonctionner dans les deux * 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)
Exemple:
> python wheeldeps.py psutil-5.4.5-cp27-cp27m-win_AMD64.whl
Requires-Dist: enum34; extra == 'enum'
Réponse générique, sous unix: utilisez strace
Trouvez le pid:
ps -C psutil
// Output example 1337
Strace tout dans les processus
Sudo strace -p 1337
Dépendances de processus Strace uniquement:
Sudo strace -f -e open -p 1337
Ceci est un post que j'ai trouvé quelque part. Je copiais tout et m'envoyais un courrier électronique, je n'ai donc pas de source pour cette réponse, mais je pense que cela pourrait aider. Si quelqu'un connaît la source, je vais supprimer ce message et le lier à ce message.
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
L'exigence.txt aura toutes les exigences nécessaires pour le paquet.
J'utilise pour installer mes envs virtuels avec pipenv
qui installe pew
comme condition requise. pew
vous permet d'installer des environnements virtuels temporaires qui sont supprimés lorsque vous exit
ces environnements virtuels spéciaux. Alors...
Créez un nouvel environnement virtuel vide et activez-le à la volée:
pew mktmpenv -p /usr/bin/python3.6
Installez votre paquet:
pip install somedistro
Voyez quelles sont les exigences de votre distribution (ainsi que les exigences des exigences ...):
pip list
Désactiver et supprimer l'environnement temporaire.
exit
De plus, les environnements virtuels temporaires sont très utiles pour les tests d'empaquetage.