[VueSlsApp] Geben Sie PYTHONPATH in Lambda an und verwenden Sie einfach die externe Bibliothek

Hinweis: Dieser Artikel ist ein Nachdruck des Hinweisartikels. Wenn der Inhalt aktualisiert wird, wird der Hinweis aktualisiert. Wenn der Qiita-Artikel veraltet ist, überprüfen Sie bitte auch den Hinweis.

https://note.com/thiroyoshi/n/nfcb0be8c0a22


Hallo. Das ist Thiroyoshi.

Dieses Mal möchte ich eine kleine Technik einführen, wenn ich die Python-Bibliothek mit Lambda verwende. Ich habe dies in die VueSlsApp aufgenommen. Es sieht nicht anders aus, wird aber empfohlen, weil es die Quelle vereinfacht.

Wenn Sie VueSlsApp noch nicht kennen, lesen Sie die folgenden Einführungsartikel und Magazine. https://note.com/thiroyoshi/n/na16112b4ec1b

Sie können tatsächlich berühren, was Sie bereitgestellt haben, und zwar aus dem Folgenden. https://vueslsapp.thiroyoshi.com/

Das VusSlsApp-Repository befindet sich unten. https://github.com/thiroyoshi/vueslsapp

Inhaltsverzeichnis

--Wenn Sie die Python-Bibliothek mit Lambda verwenden, tritt das Problem auf, die Bibliothek zusammen zu heben ... Ein schwerwiegenderes Problem, das den Pfad nicht überschreitet

Wenn Sie die Python-Bibliothek mit Lambda verwenden, tritt das Problem auf, die Bibliothek zusammen zu erhöhen ... Ein schwerwiegenderes Problem, das den Pfad nicht überschreitet

Das Problem, mit dem jeder bei der Verwendung von Python mit Lambda konfrontiert ist, besteht darin, eine Bibliothek zusammenzustellen. Jetzt gibt es verschiedene Tools, die relativ einfach zu erstellen sind.

Das Serverless Framework, das auch in VueSlsApp verwendet wird, sammelt automatisch die Elemente im Verzeichnis, sodass es kein Problem gibt.

Das Problem ist, dass ** die Bibliothek nicht gefunden und nicht ausgeführt werden kann, da der Pfad zum Zeitpunkt der Ausführung nicht übergeben wird **. Es spielt keine Rolle, ob Sie das Serverless Framework verwenden ...

Natürlich hat Lambda, das die Python-Ausführungsumgebung enthält, nicht den Pfad der Bibliothek, die ich ohne Einstellungen hinzugefügt habe.

Dann ** pass einfach den Pass **.

Wenn Sie den Pfad zu Ihrem PTHONPATH hinzufügen, können Sie Python sehen

In Python gibt es eine Umgebungsvariable namens PYTHONPATH, die den Pfad für die Suche in der Quelle festlegt. Siehe unten für den offiziellen Kommentar.

https://docs.python.org/ja/3/using/cmdline.html#envvar-PYTHONPATH

Der folgende Artikel beschreibt, wie PYTHONPATH in Lambda und alle Forschungsinhalte bis zu diesem Punkt übergeben werden. informativ.

http://uorat.hatenablog.com/entry/2017/08/31/145340

Die wichtigen Punkte sind wie folgt.

・/var/Geben Sie auch die Laufzeit an

Auf Lambda scheint die Python-Laufzeit standardmäßig auch in PYTHONPATH angegeben zu sein. Mit anderen Worten: ** Wenn Sie PYTHONPATH selbst überschreiben, können Sie Python überhaupt nicht ausführen **.

In VueSlsApp werden Bibliotheken in einem Verzeichnis namens pylibs gesammelt, das wie folgt festgelegt ist.

** ・ serverless.yml (Teilauszug) **

PYTHONPATH: /var/runtime:/var/task/pylibs

Infolgedessen wird die externe Bibliotheksreferenz wie folgt geändert:

** ・ functions / repository / messages_repository.py (vor der Änderung) **

import json
import random
import hashlib
from decimal import Decimal
from functions.common import initializer
initializer.add_path()
from pylibs import boto3
from pylibs.boto3.dynamodb.conditions import Key
from functions.common.decimal_encoder import DecimalEncoder

** ・ functions / repository / messages_repository.py (nach Änderung) **

import json
import random
import hashlib
from decimal import Decimal
from pylibs import boto3
from pylibs.boto3.dynamodb.conditions import Key
from functions.common.decimal_encoder import DecimalEncoder

Das Update ist, dass der Code, der den Pfad der externen Bibliothek ** initializer.add_path () ** dynamisch hinzugefügt hat, nicht mehr benötigt wird.

Es ist nicht cool und die Leistung sinkt, also habe ich mich gefragt, wie ich diese Methode stoppen kann ... Ich war froh endlich aufzuhören! (Jubel

Wenn Sie eine umgebungsabhängige Bibliothek haben, ist diese Methode möglicherweise nicht gut

Die obige Methode ist nicht geeignet, wenn die Bibliothek selbst für die Ausführungsumgebung neu erstellt werden muss.

Diese Methode ist nur für ** die Verwendung einer Bibliothek vorgesehen, die auf dem Betriebssystem mit pip install ** ausgeführt wird. Wenn Sie die Installation unter Windows durchführen, werden die unter Windows ausgeführten Bibliotheken zusammen aufgelistet.

Mit anderen Worten, diese Methode ist nicht geeignet, wenn die Umgebung stark abhängig ist und Sie die Build-Umgebung der Bibliothek entsprechend der Ausführung unter Lambda ändern müssen (= unter Amazon Linux).

In einem solchen Fall gibt es meiner Meinung nach die folgenden Methoden. (Ich habe es nicht versucht)

・ Verwenden Sie PYTHONPATH, ändern Sie jedoch die CI / CD-Umgebung in Amazon Linux

Sie können die Umgebung bei der Pip-Installation ändern. Mit anderen Worten, lassen Sie uns das Betriebssystem, auf dem die CI / CD-Umgebung ausgeführt wird, auf Amazon Linux einstellen.

Abhängig von den CI / CD-Tools und -Diensten können Sie das Betriebssystem möglicherweise nicht frei ändern. Ich denke, Sie müssen sorgfältig prüfen, ob Sie das Amazon Linux-Image in Ihrer eigenen Umgebung verwenden können.

- Verwenden Sie Serverless-Python-Anforderungen

Es gibt ein Serverless Framework-Plug-In, das Python-Bibliotheken gut organisiert.

https://www.npmjs.com/package/serverless-python-requirements

Dieses Plug-In verwendet Docker auch zum Erstellen in derselben Umgebung wie die Ausführungsumgebung.

Warum also nicht dieses Plug-In von Anfang an verwenden?

Der Grund ist einfach: ** PYTHONPATH ist alles, was Sie angeben müssen **.

Mit dem AP, den ich mache, macht Lambda nur einfache Dinge. Mit anderen Worten, es gibt fast keine Möglichkeit, eine umfangreiche Bibliothek zu verwenden, die von der Build-Umgebung abhängt. Darüber hinaus hat die Verwendung eines Plug-Ins in meiner Entwicklung viele unnötige Prozesse, z. B. die Installation und das Ausführen eines Docker-Containers, was die Ausführungszeit der Pipeline verlängern kann.

Schließlich

Dieses Mal habe ich einige Möglichkeiten vorgestellt, um den Python-Pfad in Lambda zu übergeben.

Schließlich gibt es verschiedene Methoden, aber es ist am besten, die Methode mit der höchsten Kostenleistung für Sie zu wählen. Selbst wenn es ein nützliches Werkzeug gibt, ist es nicht gut, es blind zu glauben und es zu benutzen.

Was brauchst du? Was brauchst du? Ist es nicht ein Faktor, der die Effizienz der Entwicklung verringert? Aus dieser Perspektive möchte ich Tools und Entwicklungsmethoden identifizieren.

Recommended Posts

[VueSlsApp] Geben Sie PYTHONPATH in Lambda an und verwenden Sie einfach die externe Bibliothek
Verwendung der C-Bibliothek in Python
Verwenden Sie die LibreOffice-App in Python (3) Bibliothek hinzufügen
Fügen Sie mit SQLite3 nur zwei Zeilen hinzu und verwenden Sie die Erweiterungsbibliothek (erweiterte SQL-Funktion)!
Schließen Sie externe Kv-Dateien in Python Kivy ein und verwenden Sie sie
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
[Anfängernotiz] So legen Sie den Lesepfad der Bibliothek in Python fest
Geben Sie den Browser an, der mit Jupyter Notebook verwendet werden soll. Besonders Mac. (Und Vivaldi)
Verwenden Sie die LibreOffice-App in Python (2) Manipulieren Sie calc (von Makro und extern)