[GO] Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei

Was du machen willst

Zum Beispiel ein Projekt, in dem main.py eine andere Datei aufruft ...

- main.py
- sub1.py
- folder
    - sub2.py

↓ ↓ ↓ Die Funktionen und Klassen, die davon abhängen ...

onefile.py

Gyu! !! !! Ich bin überrascht.

(Die Motivation ist, dass ich mich gefragt habe, ob ich die vom Projekt verwaltete Python-Datei mit Google Colab problemlos ausführen kann.)

Lösung

Hier können Sie das Python-Paket stickytape verwenden. https://pypi.org/project/stickytape/

Klebeband = Klebeband

Experiment

Der gesamte experimentierte Code wird auf Github veröffentlicht, also als Referenz.

install Jetzt können Sie den Befehl stickytape verwenden. (Kein Befehlsname ...)

$ pip install stickytape

Bereiten Sie die Datei vor

Die Konfiguration ist wie folgt.

- main.py
- sub1.py
- folder
    - sub2.py

folder/sub2.py Erstellen Sie eine Apple-Klasse nach Ihren Wünschen und geben Sie ihr eine Value-Eigenschaft nach Ihren Wünschen.

class Apple:

    def __init__(self, value):
        self.value = value

sub1.py Ich werde eine durchschnittliche Funktion entsprechend machen.

sub1.py


def mean(a, b):
    return (a+b)/2

main.py Importieren Sie es, berechnen Sie es entsprechend und zeigen Sie es entsprechend an.

from sub1 import mean
from folder.sub2 import Apple

apple1 = Apple(value=100)
apple2 = Apple(value=200)

result = mean(apple1.value, apple2.value)
print(result)

Jetzt! In einer Datei!

Führen Sie den folgenden Befehl aus. (Natürlich ist alles in onefile.py in Ordnung.)

$ stickytape main.py > onefile.py

Ergebnis

Die folgende onefile.py wird generiert.

#!/usr/bin/env python


import contextlib as __stickytape_contextlib

@__stickytape_contextlib.contextmanager
def __stickytape_temporary_dir():
    import tempfile
    import shutil
    dir_path = tempfile.mkdtemp()
    try:
        yield dir_path
    finally:
        shutil.rmtree(dir_path)

with __stickytape_temporary_dir() as __stickytape_working_dir:
    def __stickytape_write_module(path, contents):
        import os, os.path

        def make_package(path):
            parts = path.split("/")
            partial_path = __stickytape_working_dir
            for part in parts:
                partial_path = os.path.join(partial_path, part)
                if not os.path.exists(partial_path):
                    os.mkdir(partial_path)
                    open(os.path.join(partial_path, "__init__.py"), "w").write("\n")

        make_package(os.path.dirname(path))

        full_path = os.path.join(__stickytape_working_dir, path)
        with open(full_path, "w") as module_file:
            module_file.write(contents)

    import sys as __stickytape_sys
    __stickytape_sys.path.insert(0, __stickytape_working_dir)

    __stickytape_write_module('sub1.py', 'def mean(a, b):\n    return (a+b)/2')
    __stickytape_write_module('folder/sub2.py', 'class Apple:\n\n    def __init__(self, value):\n        self.value = value')
    from sub1 import mean
    from folder.sub2 import Apple
    
    apple1 = Apple(value=100)
    apple2 = Apple(value=200)
    
    result = mean(apple1.value, apple2.value)
    print(result)

Für einen Moment wurde es "Was ist los !?", Aber als ich das ausführte ...

150.0

Das korrekte Berechnungsergebnis wird sicher angezeigt.

Experimentieren Sie mit Google Colab

Ich habe den obigen Code kopiert und in Google Colab ausgeführt.

Wie unten gezeigt, wurde 150.0 sicher angezeigt.

(Mach dir keine Sorgen, dass die regenbogenfarbene Katze läuft.)

スクリーンショット 2020-06-25 12.38.44.png

Skripted

Es ist eine Seite von hier.

Der Befehl stickytape ist lang und ich bin faul, jedes Mal das Verzeichnis der generierten Datei anzugeben. Daher halte ich es für eine gute Idee, es wie folgt zu skripten.

- main.py
- sub1.py
- folder
    - sub2.py
- scripts
    - tape.sh
- build
    - onefile.py

tape.sh


#Ursprünglicher Wert
entry="main.py"
output="onefile.py"

#Möglichkeit
while getopts e:o: OPT
do
	case $OPT in 
		"e" ) entry=${OPTARG};;
		"o" ) output=${OPTARG};;
	esac
done

#Lauf
stickytape ${entry} > "build/${output}"

Der folgende Befehl führt main.py aus und generiert onefile.py im Build-Verzeichnis.

$ sh scripts/tape.sh

Ich habe auch Optionen vorbereitet.

Optionsname Erläuterung
-e Name der Einstiegspunktdatei
-o Name der Ausgabedatei
$ sh scripts/tape.sh -e <Dateiname> -o <Dateiname>

Das generierte Verzeichnis ist mit "build" fixiert. Wenn es Ihnen nicht gefällt, ändern Sie es.

Vorstellen

Wenn Sie es am Anfang schreiben, wird es Ihnen im Weg stehen, also lassen Sie mich mich am Ende ruhig vorstellen.

Name Aki Wataoka
Schule Kobe University Graduate School
Bachelorforschung Maschinelles Lernen,Sprachverarbeitung
Graduiertenforschung Maschinelles Lernen,Gerechtigkeit,Generationsmodell, etc
Twitter @Wataoka_Koki

Folge uns auf Twitter!

Recommended Posts

Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei
[Python & Unix] Kombinieren Sie mehrere PDF-Dateien zu einer.
Kombinieren Sie mehrere CSV-Dateien mit Python zu einer CSV-Datei (vorausgesetzt, nur eine Kopfzeile)
Kombinieren Sie mehrere mit Pandas geladene Excel-Dateien zu einer
Kombinieren Sie Python-Funktionsargumente zu einer einzigen Variablen
Konvertieren Sie mehrere JPG-Dateien in eine PDF-Datei
Entpacke mehrere komprimierte Dateien (Python)
[Python] Google Mail mit Python senden: Senden Sie eins nach dem anderen mit mehreren angehängten Bilddateien
[Blender] Teilen Sie das Blender-Skript in mehrere Dateien auf
Behandeln Sie mehrere Python-Versionen in einem Jupyter
Kombinieren Sie Python-Funktionsargumente zu einer einzigen Variablen
Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei
[Python & Unix] Kombinieren Sie mehrere PDF-Dateien zu einer.
Kombinieren Sie mehrere mit Pandas geladene Excel-Dateien zu einer
Skript-Python-Datei
Kombinieren Sie mehrere CSVs und Datenrahmen mit hoher Geschwindigkeit zu einem Datenrahmen [60x Geschwindigkeit]
[Automatisierung] Konvertieren Sie Python-Code in eine exe-Datei
Python-Dateiverarbeitung
Python-Code, der zusammenhängende Leerzeichen in einem entfernt
Kombinieren Sie mehrere mit Pandas geladene Excel-Dateien zu einer
Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei
Verbinden Sie mit OpenCV mehrere Videos auf einmal!
[Python & Unix] Kombinieren Sie mehrere PDF-Dateien zu einer.
In einem Fenster werden mehrere Grafiken angezeigt (Python).
Konvertieren Sie mehrere Protodateien gleichzeitig mit Python
Beispiel, um Python Kivy in eine Datei zu packen
Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert
Python-Textlesung für mehrere Zeilen und eine Zeile
Konvertieren Sie mehrere Jupyter-Notizbücher zusammen in eine HTML-Datei
Entfernen Sie Überschriften aus CSV-Dateien mit mehreren Formaten mit Python
Dateioperationen in Python
[Python] Datei- / Verzeichnisoperation
Ein Liner in Python
[Hinweis] Datei lesen ~ Python ~
Dateiverarbeitung in Python
Python Zundko One Liner
[Python] Erstellen Sie mehrere Verzeichnisse
Führen Sie die Python-Datei automatisch aus
Pyc-Datei lesen (Python 3.5.2)
Dateimanipulation mit Python
Python - MP3-Dateien markieren
Lesen Sie die Python-CSV-Datei
Lesen einer externen Python-Datei
[Python] CSV-Dateien lesen
[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien