Wie kann ich ein Python-Modul im Code installieren?
Lesezeit: 1 Minute
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
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.
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.
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
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/…
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.
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