Einführung in das magische "jsii", mit dem in TypeScript geschriebene Programme mit Python usw. ausgeführt werden.

Wenn Sie aus der Schlussfolgerung heraus schreiben, können Sie zunächst etwas wie die folgende Abbildung tun.

image.png

Dies ist ein Beispiel für die Ausführung des in TypeScript geschriebenen Programms, das oben vom Python-Programm unten angezeigt wird.

Es verwendet eine Bibliothek namens jsii, um ** TypeScript-Programme in Python-fähige Bibliotheken ** zu konvertieren. Wie die offizielle Dokumentation besagt, dass "die Magie passiert", ist es eine magische Technik.

jsii kann zusätzlich zu Python in Sprachen wie Java verwendet werden. In diesem Artikel wird jedoch ein in TypeScript geschriebenes Programm in Python ausgeführt.

Lass es uns tatsächlich tun.

Ausführungsumgebung dieses Dokuments

Versuchen Sie es mit jsii

Sie können jsii ungefähr im folgenden Ablauf verwenden.

  1. Schreiben Sie das Programm in TypeScript
  2. Erstellen Sie mit jsii Pakete in anderen Sprachen
  3. Installieren und verwenden Sie in anderen Sprachen

Schreiben eines TypeScript-Programms

Schreiben Sie als Beispiel ein geeignetes FizzBuzz-Programm in lib / index.ts mit TypeScript.

lib/index.ts


export class MyClass {
  fizzBuzz(arg: number): string {
    if (arg % (3 * 5) === 0) {
      return 'FizzBuzz';
    } else if (arg % 3 === 0) {
      return 'Fizz';
    } else if (arg % 5 === 0) {
      return 'Buzz';
    }
    return arg.toString();
  }
}

Wenn Sie den Vorgang überprüfen möchten, indem Sie ihn normal als TypeScript ausführen, führen Sie ihn mit Ihrer bevorzugten Methode aus, z. B. "$ npx ts-node lib / index.ts".

Beschreibung von package.json

jsii verwendet die Informationen in package.json zur Erstellungszeit, um Metainformationen für Bibliotheken in jeder Sprache zu registrieren. Daher kann jsii nur betrieben werden, wenn package.json bis zu einem gewissen Grad" richtig "geschrieben ist.

Das Folgende ist ein Einstellungsbeispiel.

package.json


{
  "name": "jsii-example",
  "version": "1.0.0",
  "main": "lib/index.js",
  "types": "lib/index.d.ts",
  "author": "your_name",
  "repository": {
    "url": "https://example.com",
    "type": "Git"
  },
  "license": "MIT",
  "jsii": {
    "outdir": "dist",
    "targets": {
      "python": {
        "distName": "your_name.jsii_example",
        "module": "your_name.jsii_example"
      }
    }
  },
  "devDependencies": {
    "jsii": "^0.20.6",
    "jsii-pacmak": "^0.20.6"
  }
}

Wie oben erwähnt, sind die Teile, die normalerweise weggelassen werden, wie "Repository" und "Autor", bei der Verwendung von jsii unverzichtbar. Außerdem müssen "main" und "types" im selben Verzeichnis wie "lib / index.ts" angegeben werden.

Beschreiben Sie außerdem als jsii-spezifische Einstellung die Informationen für jedes Sprachpaket an der Stelle mit dem Namen "jsii". Um das Python-Paket zu erstellen, werden die Modulnameninformationen dieses Mal als "Python" in "Zielen" beschrieben.

Bauen Sie mit jsii

Installieren Sie die Pakete, die zum Ausführen des Builds "jsii" erforderlich sind.

$ npm install --save-dev jsii jsii-pacmak
$ echo "jsii
wheel
publication" > requirements.txt
$ pip install --require requirements.txt

Erstellen Sie nach Abschluss der obigen Installation mit dem Befehl jsii und verpacken Sie mit dem Befehl jsii-pacmak.

$ npx jsii
$ npx jsii-pacmak

Es ist erfolgreich, wenn "your_name.jsii_example-1.0.0.tar.gz" im Verzeichnis "dist / python" erstellt wird.

Führen Sie von Python aus

Installieren Sie die zuvor als Python-Bibliothek erstellte Paketdatei.

$ pip install dist/python/your_name.jsii_example-1.0.0.tar.gz

Importieren Sie diese Bibliothek und schreiben Sie ein Python-Programm, das die Funktion fizzBuzz aufruft.

python.py


import your_name.jsii_example

obj = your_name.jsii_example.MyClass()

print(obj.fizz_buzz(2))
print(obj.fizz_buzz(3))
print(obj.fizz_buzz(5))
print(obj.fizz_buzz(15))

Es ist endlich Zeit zu rennen.

$ python python.py 
2
Fizz
Buzz
FizzBuzz

Ich konnte in TypeScript geschriebenen Code aus Python aufrufen!

Verwenden Sie jsii mit Docker

Da die bisher beschriebene Ausführung der Ausführungsumgebung die Installation mehrerer Sprachen erfordert, ist dies etwas mühsam. Daher haben wir dieses Mal eine Docker-Datei vorbereitet, mit der Python und Node.js vorbereitet werden können, die für die gemeinsame Ausführung von "jsii" erforderlich sind.

FROM python:3.7.5-slim

ENV DIR /app
WORKDIR $DIR
RUN apt update && apt install -y nodejs npm

# setup python
COPY requirements.txt $DIR
RUN pip install --requirement requirements.txt

# setup node
COPY package.json $DIR
RUN npm install

# main: lib/index.ts
COPY lib/ $DIR/lib

Nachdem Sie das oben erwähnte "package.json", "require.txt", "lib / index.ts" vorbereitet haben, verwenden Sie es wie folgt.

$ mkdir dist
$ docker build --tag jsii-example .
$ docker run --rm --volume $(pwd)/dist:/app/dist jsii-example /bin/bash -c 'npx jsii && npx jsii-pacmak'

Es ist erfolgreich, wenn die Paketdatei unter dist / generiert wird.

Wie jsii funktioniert

Der Mechanismus von jsii wird in der jsii-Dokumentation erläutert. jsii/runtime-architecture.md at master · aws/jsii

Wenn der Hostcode wie Python den jsii-Verwendungspunkt erreicht, wird anscheinend der untergeordnete Prozess des Knotens gestartet, das Programm ausgeführt und das Ergebnis von Python empfangen. Wenn Sie im Verzeichnis / tmp auf Ihrem Host nachsehen, finden Sie Hinweise auf eine vorübergehende npm-Installation des Programms.

In der Dokumentation heißt es außerdem, dass die Leistung beeinträchtigt wird, da die Verarbeitung, die ursprünglich mit Python endet, auch von der Kommunikation mit Node.js abhängt. Es ist schwierig für jsii, in Anwendungen zu arbeiten, die Leistung erfordern, wie z. B. Produktionsumgebungen, und es wird erwartet, dass es in Entwicklungs- und Build-Tools verwendet wird.

Beispiel für die Verwendung von jsii

jsii ist ein von AWS entwickeltes OSS. Als aktuelles Verwendungsbeispiel wird jsii in AWS CDK verwendet, einem von AWS bereitgestellten Tool für Infrastruktur als Code. Wie bei jsii können Sie mit aws-cdk Infrastrukturkonfigurationen in TypeScript, Python, .NET und Java schreiben.

Zitiert aus Häufig gestellte Fragen zur AWS Cloud-Entwicklung

AWS erstellt die Geschäftslogik des AWS Construct-Bibliothekspakets in TypeScript und bietet eine Zuordnung zu jeder unterstützten Programmiersprache. Dies stellt sicher, dass sich AWS CDK-Konstrukte in verschiedenen Sprachen konsistent verhalten und einen umfassenden Satz von Konstruktpaketen bereitstellen können, die in allen Sprachen verfügbar sind. Der gesamte im AWS CDK-Projekt erstellte Code stammt ursprünglich aus der Programmiersprache Ihrer Wahl. Die JavaScript-Laufzeit ist eine detaillierte Implementierung Ihrer Programmiererfahrung. Das jsii-Projekt finden Sie unter https://github.com/aws/jsii.

Tips

Zusammenfassung

Mit jsii konnte ich ein in TypeScript geschriebenes Programm im Python-Quellcode ausführen. Obwohl es sich noch in der Entwicklung befindet und viele Einschränkungen aufweist, hat es eine gewisse Zukunft, da es tatsächlich im AWS CDK verwendet wird. Wenn Sie ein Tool verwenden möchten, das mit einer Codebasis aus mehreren Sprachen erstellt wurde, ist dieses jsii meiner Meinung nach eine Option.

Das diesmal verwendete Programm ist auch auf GitHub veröffentlicht. Wenn Sie interessiert sind, schauen Sie bitte. https://github.com/s2terminal/jsii-example

Recommended Posts

Einführung in das magische "jsii", mit dem in TypeScript geschriebene Programme mit Python usw. ausgeführt werden.
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Stresstest mit Locust in Python geschrieben
Zeigen Sie Python 3 im Browser mit MAMP an
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Diejenige, die den Fortschrittsbalken in Python anzeigt
Formeln, die unter Mathematik mit Python ausführen angezeigt werden
Die Geschichte, die zur Installation von Pip passt
Einführung in das Buch "Erstellen einer profitablen KI mit Python", mit dem Sie in kürzester Zeit maschinelles Lernen erlernen können
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
[Python] Holen Sie sich die Zahlen im Diagramm mit OCR
Verwenden Sie Cursur, das in Python automatisch mit sqlite3 geschlossen wird
Crawlen Sie die im Twitter-Tweet enthaltene URL mit Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Mit Python psycopg2 erhalten Sie Ergebnisse im Diktatformat
Schreiben Sie mit OpenCV-Python Zeichen in die Kartenillustration
Suchen Sie den Teil 575 aus Wikipedia in Python
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Module, die die Shell in Python durchlaufen können
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Verwenden Sie ein Makro, das beim Speichern von Python mit vscode ausgeführt wird
[CleanArchitecture with Python] Teil 2: Frameworks & Drivers Layer: Die Entstehung des Web
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Die Geschichte, dass Python nicht mehr mit VS Code (Windows 10) arbeitet
Informationen zu netaddr, das IP-Adresse, CIDR usw. in Python verarbeitet
Wenn Sie der Meinung sind, dass die Person, die Sie mit pip eingegeben haben, nicht funktioniert → Verwenden Sie python3 zufällig?
Ich habe die Jumbo-Lotterie zum Jahresende mit Python gekauft und analysiert, die in Colaboratory ausgeführt werden kann
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt