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.)
Hier können Sie das Python-Paket stickytape verwenden. https://pypi.org/project/stickytape/
Klebeband = Klebeband
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
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)
Führen Sie den folgenden Befehl aus. (Natürlich ist alles in onefile.py in Ordnung.)
$ stickytape main.py > onefile.py
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.
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.)
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.
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 |
@Wataoka_Koki |
Folge uns auf Twitter!
Recommended Posts