Wie kann ich ein Python-Modul im Code installieren?

Lesezeit: 1 Minute

chuwys Benutzeravatar
chuwy

Ich muss ein Paket von installieren PyPI direkt in meinem Skript.

Gibt es vielleicht irgendein Modul bzw distutils (distribute, pipetc.) Funktion, mit der ich einfach so etwas wie ausführen kann pypi.install('requests') und Anfragen werden in meiner virtuellen Umgebung installiert?

  • Warum definieren Sie das zugehörige Modul nicht als Abhängigkeit in der setup.py Ihres eigenen Pakets?

    – Andreas Jung

    8. September 2012 um 17:34 Uhr


  • Sie wissen … so wie es eigentlich gemacht werden sollte … aber Sie könnten immer os.system (“pip install blah”) verwenden, aber Sie benötigen möglicherweise sudo-Zugriff … besser, es einfach zu einer Abhängigkeit in Ihrem Setup zu machen. py

    – Joran Beasley

    8. September 2012 um 17:35 Uhr

  • Würden Sie die akzeptierte Antwort hier ändern? Importieren pip ist nie eine gute Idee – die bloße Tatsache, dass der gesamte Inhalt enthalten ist _internal ab Version 10…

    – Antti Haapala – Слава Україні

    6. Dezember 2019 um 21:53 Uhr

  • @chuwy stackoverflow.com/a/50255019/918959 <= dieser. pip._internal nicht importierbar ist, kann es absolut zufällige Dinge tun, wenn es in ein anderes Programm importiert wird.

    – Antti Haapala – Слава Україні

    11. Dezember 2019 um 10:26 Uhr

  • @AnttiHaapala okay, ich habe es geändert. Mir persönlich gefallen beide Lösungen nicht, aber ich bin heutzutage weit weg von Python, also vertraue ich deiner Meinung.

    – chuwy

    13. Dezember 2019 um 17:12 Uhr

Benutzeravatar von Aaron de Windt
Aaron de Windt

Die offiziell empfohlene Methode zum Installieren von Paketen aus einem Skript besteht darin, die Befehlszeilenschnittstelle von pip über einen Unterprozess aufzurufen. Die meisten anderen hier vorgestellten Antworten werden von pip nicht unterstützt. Darüber hinaus wurde seit Pip v10 der gesamte Code verschoben pip._internal gerade um den Benutzern klar zu machen, dass die programmatische Verwendung von pip nicht erlaubt ist.

Verwenden sys.executable um sicherzustellen, dass Sie dasselbe anrufen pip der aktuellen Laufzeit zugeordnet.

import subprocess
import sys

def install(package):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

  • Ein Problem dabei ist, dass sich für unerfahrene Benutzer unter Windows Python und Pip nicht immer in ihrem PATH befinden, und daher wäre eine .py-Datei, auf die doppelgeklickt werden könnte, ziemlich praktisch, während ein Kommentar “pip install xxx” sein kann ziemlich knifflig.

    – jdpipe

    17. April 2020 um 1:27 Uhr

  • CalledProcessError: Befehl ‘[‘C:\\ProgramData\\Anaconda3\\pythonw.exe’, ‘-m’, ‘pip’, ‘install’, ‘googleapiclient’]’ zurückgegebener Nicht-Null-Exit-Status 1.

    – parvij

    13. Mai 2020 um 18:30 Uhr

  • Ich versuche, diesen Ansatz zu verwenden, aber mein Python ist eingebettet/von einer anderen ausführbaren Datei gestartet, sodass “sys.executable” nicht den richtigen Pfad zurückgibt. Gibt es eine Alternative, die für Python funktionieren würde, das von einem anderen Prozess gestartet wird?

    – Benutzer441669

    26. Dezember 2020 um 23:56 Uhr

  • Seltsame Sache, ich muss das Skript erneut ausführen, von dem aus das Modul installiert wurde, damit es erkannt wird

    – BND

    24. Juni 2022 um 7:53 Uhr

  • Beachten Sie, dass die Verwendung seit 3.5 jetzt empfohlen wird subprocess.run(…, check=True)

    – Brian

    22. Juli 2022 um 12:18 Uhr

Benutzeravatar von Rikard Anglerud
Rikard Anglerud

Sie können auch Folgendes verwenden:

import pip

def install(package):
    if hasattr(pip, 'main'):
        pip.main(['install', package])
    else:
        pip._internal.main(['install', package])

# Example
if __name__ == '__main__':
    install('argh')

  • @nbro Sie übergeben Optionen an pip.main() wie Sie es auf der Befehlszeile tun würden (aber mit jeder Option als separater Eintrag in der Liste, anstatt als einzelne Zeichenfolge). Und um anzugeben, welche Version des Pakets Sie möchten, gehen Sie genauso vor wie in der Befehlszeile. Beispiel: pip.main(['install', 'pip==7.1.0'])

    – Kas

    20. Juli 2015 um 10:18 Uhr


  • Siehe auch stackoverflow.com/questions/6457794/…, das zeigt, wie man mit dem Fall umgeht, dass eine Installation fehlschlägt.

    – Meier

    20. Juli 2015 um 11:21 Uhr

  • from pip._internal import main as pipmain dann kannst du verwenden pipmain() genau wie die veralteten pip.main() siehe stackoverflow.com/questions/43398961/…

    – 3pitt

    30. Mai 2018 um 15:48 Uhr

  • es ist jetzt veraltet.

    – Morse

    8. Juli 2018 um 1:12 Uhr

  • Es ist aus einem bestimmten Grund veraltet und wird nicht mehr empfohlen. sehen pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program

    – nbk

    28. Juli 2019 um 16:56 Uhr

Benutzeravatar von rominf
Rominf

Wenn Sie verwenden möchten pip Um das erforderliche Paket zu installieren und nach der Installation zu importieren, können Sie diesen Code verwenden:

def install_and_import(package):
    import importlib
    try:
        importlib.import_module(package)
    except ImportError:
        import pip
        pip.main(['install', package])
    finally:
        globals()[package] = importlib.import_module(package)


install_and_import('transliterate')

Wenn Sie ein Paket als Benutzer installiert haben, kann das Problem auftreten, dass Sie das Paket nicht einfach importieren können. Siehe So aktualisieren Sie sys.path? für weitere Informationen.

  • Irgendeine Idee, wie man das auf Python 3 macht? imp.reload(site) bekommt mich RuntimeError: dictionary changed size during iteration

    – kgadek

    3. August 2015 um 16:35 Uhr

  • Wo wird das Paket installiert, nachdem ich dies getan habe, konnte ich dies nicht tun pip uninstall <package_name>. Ich kann es immer noch mit deinstallieren pip.main wollte aber nur wissen, wo es das Paket installiert?

    – Ischan Khare

    26. April 2016 um 12:20 Uhr

  • War neugierig. würde das richtig funktionieren, wenn ich: pip install requests[security] ? Ich war mir nicht sicher, ob es die Globals richtig definieren würde.

    – Fallenreaper

    8. Mai 2017 um 16:47 Uhr

  • Veraltet. pip.main funktioniert nicht mehr. pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program

    – Wim

    5. Dezember 2019 um 16:10 Uhr

  • Importiert der Import innerhalb einer Funktion wirklich in den Hauptnamensraum oder nur in den Namensraum davon install_and_import Funktion?

    – sh37211

    31. März 2021 um 0:26 Uhr

Das sollte funktionieren:

import subprocess

def install(name):
    subprocess.call(['pip', 'install', name])

Benutzeravatar von Sohan Das
Sohan Das

Ich habe Aarons Antwort eine Ausnahmebehandlung hinzugefügt.

import subprocess
import sys

try:
    import pandas as pd
except ImportError:
    subprocess.check_call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
    import pandas as pd

  • schöne Implementierung von Unterprozess und Pip, besser als die meisten Lösungen hier

    – Shantanu Bedajna

    23. September 2019 um 11:30 Uhr

  • Sie überprüfen nicht den Rückgabewert von subprocess.call Der Code könnte also fehlschlagen.

    – Antti Haapala – Слава Україні

    7. Dezember 2019 um 13:42 Uhr

  • Warum subprocess.check_call und nicht subprocess.call?

    – Caddy

    12. März 2021 um 4:50 Uhr

  • Ok, “import pandas as pd” ist kein Problem, aber … ist es logischerweise nicht hässlich?

    – Daniel Bandeira

    4. Oktober 2021 um 13:14 Uhr

Benutzeravatar von Serge Stroobandt
Serge Stroobandt

Um mehrere Pakete zu installieren, verwende ich a setup.py Datei mit folgendem Code:

import sys
import subprocess
import pkg_resources

required  = {'numpy', 'pandas', '<etc>'} 
installed = {pkg.key for pkg in pkg_resources.working_set}
missing   = required - installed

if missing:
    # implement pip as a subprocess:
    subprocess.check_call([sys.executable, '-m', 'pip', 'install', *missing])

  • schöne Implementierung von Unterprozess und Pip, besser als die meisten Lösungen hier

    – Shantanu Bedajna

    23. September 2019 um 11:30 Uhr

  • Sie überprüfen nicht den Rückgabewert von subprocess.call Der Code könnte also fehlschlagen.

    – Antti Haapala – Слава Україні

    7. Dezember 2019 um 13:42 Uhr

  • Warum subprocess.check_call und nicht subprocess.call?

    – Caddy

    12. März 2021 um 4:50 Uhr

  • Ok, “import pandas as pd” ist kein Problem, aber … ist es logischerweise nicht hässlich?

    – Daniel Bandeira

    4. Oktober 2021 um 13:14 Uhr

Benutzeravatar von Peter Mortensen
Peter Mortensen

Verwenden:

import os
os.system('pip install requests')

Ich habe das Obige als vorübergehende Lösung versucht, anstatt a zu ändern Docker-Datei.

  • Dies ist für Anfänger im Vergleich zu allen anderen Antworten so einfach und einfach zu verstehen. Vielen Dank.

    – Shubham Garg

    3. November 2021 um 9:17 Uhr

1448960cookie-checkWie kann ich ein Python-Modul im Code installieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy