1277 Stimmen

Wie erhalte ich eine Liste der lokal installierten Python-Module?

Wie erhalte ich eine Liste der auf meinem Computer installierten Python-Module?

6voto

yegle Punkte 5705
  1. um alle verfügbaren Module zu erhalten, führen Sie sys.modules
  2. um alle installiert Module (gelesen: installiert von pip ), können Sie nachsehen pip.get_installed_distributions()

Für den zweiten Zweck, Beispielcode:

import pip
for package in pip.get_installed_distributions():
    name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
    key = package.key # sqlalchemy, django, flask-oauthlib
    module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
    location = package.location # virtualenv lib directory etc.
    version = package.version # version number

5voto

Pavan Gupta Punkte 14713

Pip-Frost erledigt das Finden von Paketen, aber man kann auch einfach den folgenden Befehl schreiben, um alle Pfade aufzulisten, in denen Python-Pakete liegen.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

4voto

Bruno Bronosky Punkte 60135

Ich musste die spezifische Version der standardmäßig in AWS Lambda verfügbaren Pakete finden. Ich tat dies mit einem Mashup von Ideen von dieser Seite. Ich teile es für die Nachwelt.

import pkgutil

__version__ = '0.1.1'

def get_ver(name):
    try:
        return str(__import__(name).__version__)
    except:
        return None

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': [{
                   'path': m.module_finder.path,
                   'name': m.name,
                   'version': get_ver(m.name),
                 } for m in list(pkgutil.iter_modules())
                 #if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
                ],
    }

Ich entdeckte, dass die mitgelieferte boto3-Bibliothek veraltet war und es nicht meine Schuld war, dass mein Code nicht funktionierte. Ich musste nur boto3 und botocore zu meinem Projekt hinzufügen. Aber ohne dies hätte ich mir den Kopf darüber zerbrochen, dass mein Code schlecht ist.

{
  "statusCode": 200,
  "body": [
    {
      "path": "/var/task",
      "name": "lambda_function",
      "version": "0.1.1"
    },
    {
      "path": "/var/runtime",
      "name": "bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "boto3",
      "version": "1.9.42"
    },
    {
      "path": "/var/runtime",
      "name": "botocore",
      "version": "1.12.42"
    },
    {
      "path": "/var/runtime",
      "name": "dateutil",
      "version": "2.7.5"
    },
    {
      "path": "/var/runtime",
      "name": "docutils",
      "version": "0.14"
    },
    {
      "path": "/var/runtime",
      "name": "jmespath",
      "version": "0.9.3"
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_exception",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "s3transfer",
      "version": "0.1.13"
    },
    {
      "path": "/var/runtime",
      "name": "six",
      "version": "1.11.0"
    },
    {
      "path": "/var/runtime",
      "name": "test_bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "urllib3",
      "version": "1.24.1"
    },
    {
      "path": "/var/lang/lib/python3.7",
      "name": "__future__",
      "version": null
    },
...

Was ich entdeckte, war auch anders als was sie offiziell veröffentlichen . Zum Zeitpunkt der Erstellung dieses Artikels:

  • Betriebssystem - Amazon Linux
  • AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
  • Linux-Kernel - 4.14.77-70.59.amzn1.x86_64
  • AWS SDK für JavaScript - 2.290.0\
  • SDK für Python (Boto 3) - 3-1.7.74 botocore-1.10.74

4voto

not2qubit Punkte 11725

Es gibt viele Arten, eine Katze zu häuten.

  • Der einfachste Weg ist die Verwendung der pydoc Funktion direkt aus der Shell mit:
    pydoc modules

  • Für weitere Informationen können Sie das Tool pip-date die Ihnen auch die Installationsdaten nennen.
    pip install pip-date


enter image description here

3voto

Massimo Punkte 2567

Es gibt viele Ideen, zunächst denke ich über diese beiden nach:

pip

Nachteile: nicht immer installiert

Hilfe('Module')

Nachteile: Ausgabe auf der Konsole; bei defekten Modulen (siehe Ubuntu...) kann es zu Fehlern kommen

Ich brauche einen einfachen Ansatz, mit grundlegenden Bibliotheken und kompatibel mit alten Python 2.x

Und ich sehe das Licht: listmodules.py

Im Quellverzeichnis der Dokumentation in 2.5 ist ein kleines Skript versteckt, das alle verfügbaren Module für eine Python-Installation auflistet.

Vorteile:

verwendet nur imp, sys, os, re, zeit

entwickelt für Python 1.5.2 und neuere Versionen

der Quellcode ist sehr kompakt, so dass man leicht daran herumbasteln kann, z.B. um eine Ausnahmeliste von fehlerhaften Modulen zu übergeben (versuchen Sie nicht, sie zu importieren)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X