Ich muss ein Paket von PyPi direkt in meinem Skript installieren. __ Vielleicht gibt es ein Modul oder eine distutils
-Funktion (distribute
, pip
usw.), mit der ich etwas wie pypi.install('requests')
ausführen kann, und Anforderungen werden in meine Virtualenv installiert.
Sie können auch etwas verwenden wie:
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __== '__main__':
install('argh')
Die Lösung von Rickard wird vom Pip-Entwicklungsteam nicht unterstützt und stürzt in einigen Fällen ab (z. B. Multithreading). Außerdem wurde der Code seit Pip 10 nach pip._internal
verschoben, um klarzustellen, dass dies nicht unterstützt wird. Diese Lösung schlägt daher mit einem Importfehler bei "pip> = 10.0.0" fehl.
Die Lösung von Quantum ist der bevorzugte Weg, um das Problem zu lösen, aber seine Implementierung garantiert nicht, dass der richtige Pip aufgerufen wird.
Diese Lösung garantiert, dass der Python-Interpreter, der den Code ausführt, aufgerufen wird.
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
Es funktioniert genauso wie die Lösung von Quantum. Statt pip direkt auszuführen, führt es dieselbe Python-Programmdatei aus, die den Code ausführt, und fordert das Pip-Modul auf, das installierte Pip-Modul auszuführen, und übergibt die restlichen Argumente an es.
Wenn Sie pip
verwenden möchten, 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, besteht das Problem, dass Sie das Paket nicht einfach importieren können. Siehe So aktualisieren Sie sys.path für weitere Informationen.
Das sollte funktionieren:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
Sie definieren das abhängige Modul innerhalb der setup.py Ihres eigenen Pakets mit der Option "install_requires".
Wenn für Ihr Paket ein Konsolenskript generiert werden muss, können Sie den Einstiegspunkt "console_scripts" verwenden, um ein Wrapper-Skript zu generieren, das Im "bin" -Ordner (z. B. Ihrer virtualenv-Umgebung) platziert wird.
Dies ist, wie ich installieren Sie alle Pakete für meine Projekte.
Einfach alle Namen zur Liste hinzufügen und ausführen eins, bevor der Hauptcode ausgeführt wird.
Dies mit der Verwendung von "venv" zu kombinieren ist großartig!
"""call this module to setup your python packages via pip"""
from pip._internal import main as pip
pip_install_argument = "install"
# packages to install
packages_to_install = [
"numpy", # math magic 1
"scipy", # math magic 2
]
def install(packages):
"""installes given packages via pip
Args:
package names as list
Returns:
None
"""
global pip_install_argument
for package in packages:
pip([pip_install_argument, package])
if __== '__main__':
install(packages_to_install)
Ich hoffe, diese Frage ist immer noch gültig ... Ich habe das oben genannte so etwas gemacht:
import sys
import os
import site
try:
import pip
except ImportError:
print "installing pip"
cmd = "Sudo easy_install pip"
os.system(cmd)
reload(site)
try:
import requests
except ImportError:
print "no lib requests"
import pip
cmd = "Sudo pip install requests"
print "Requests package is missing\nPlease enter root password to install required package"
os.system(cmd)
reload(site)
der zweite try-Block kann auch in den else-Teil des ersten try-Blocks geschrieben werden. In meiner Problemstellung muss ich jedoch zwei separate Blöcke schreiben.
Ich gehe davon aus, dass wir einen Pip auf unserer Maschine haben, und werde versuchen, eine bestimmte Abhängigkeit zu finden, die fehlt. Versuchen Sie diese Methode und lassen Sie mich wissen, was Sie denken.
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
Wenn Sie die pip
-Funktionen verwenden, um den "selbstbewussten" Importer-Mechanismus anzuwenden, denken Sie auch daran, mit dem Modul lambda
selbst zu arbeiten. Folgen Sie einfach diesem Code-Ausschnitt :)
try:
import somthing
..........
..........
except ImportError as e:
# importing pip module to handle pip functionalites
import pip
# create a lambda that import using pip by module_error_name=e[15:]
installer = lambda : pip.main(['install', str(e)[15:])
# create a lambda that import a module by linear_lambda_call
importer = lambda x : __import__(str(x)).import_module()
# install the module
installer()
# import the module
importer()
Für mich funktioniert dies (Python 2.x), vorausgesetzt, alle Anforderungen sind in requirements.txt
definiert:
def pip_auto_install():
"""
Automatically installs all requirements if pip is installed.
"""
try:
from pip._internal import main as pip_main
pip_main(['install', '-r', 'requirements.txt'])
except ImportError:
print("Failed to import pip. Please ensure that pip is installed.")
print("For further instructions see "
"https://pip.pypa.io/en/stable/installing/")
sys.exit(-1)
except Exception as err:
print("Failed to install pip requirements: " + err.message)
sys.exit(-1)
pip_auto_install()
Ich verwende den os.system
, um ein OS-Terminal zu emulieren, das ein Modul importiert, da Sie das Modul dann in allen anderen Skripten verwenden können.
Ich erstelle beispielsweise eine Game Engine, die auf separaten Skripten ausgeführt wird, die zusammengefügt wurden. Die meisten dieser Skripten verwenden Pygame. Wenn der Benutzer kein Pygame hat, wird es in der Startdatei mit folgendem Code hinzugefügt:
import os
os.system('pip install pygame')
Leider habe ich keine Ahnung, wie ich Pip auf den Computer des Benutzers bekommen soll. Dies hängt also davon ab, ob der Benutzer Pip hat.
1
> Download
> https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl
2nd
extract .whl file and; use winRar
copy extracted file and paste sitepackage [or python module container]
files are.. pip and pip-19.0.3.dist-info
3rd
import pip
pip.main(['install','scpy'])
scpy or any package you want to install
Sie können mit sys module einen Brunnen installieren
import sys
!{sys.executable} -m pip install <package> --user
Da das importierbare Pip-Modul nicht immer funktioniert, gibt es eine robustere Methode:
def PackageInstall(error):
'''
Finds out which package is missing and downloads it automatically after five seconds.
Use example:
try:
import numpy as np
import matplotlib.pyplot as plot
except ImportError as error:
PackageInstall(error)
'''
import time, subprocess, os, sys
lib = str(error)[15:].replace('\'', '')
print('>>>',str(error))
print('>>> Download will start after five seconds')
time.sleep(5)
subprocess.call("pip install " + lib)
print('>>> Restarting')
os.startfile(__file__)
sys.exit()
Das funktioniert bei Windows.