Hallo zusammen
Ich muss hier an der Uni den Sourcecode (der in python 2.6 geschrieben wurde) nach 3.0.1 konvertieren. Dafür gibt es ja 2to3. Wie rufe ich das am besten auf? Wenn ich auf der Kommandozeile ins Verzeichnis wechsle, in dem sich das .py-file befindet, dass ich konvertieren möchte und dann 2to3 aufrufe, dann erscheint die Meldung:
'2to3' is not recognized as an internal or external command,
operable program or batch file.
Was muss ich jetzt machen? Ich kenne mich nicht so aus mit der Windows-CMD.
Besten Dank für Hinweise.
2to3
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Finde heraus wo ``2to3`` bei dir liegt. Bei mir ist das in ``$PREFIX/bin/2to3``. Dann ließt du die FAQ zum Thema "Wie starte ich Skripte".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo
Bei mir ist das etwas anders:
das Programm "2to3" befindet sich in
C:\Program Files\python_301\Lib\lib2to3
Genauer gesagt, es gibt eigentlich kein Programm das genau "2to3" heisst, sonder nur ein Modul das "main.py" heisst. Ich habe jetzt in einer cmd-shell dieses Verzeichnis geöffnet und >python main.py ausgeführt, aber eine Fehlermeldung bekommen.
Traceback (most recent call last):
File "main.py", line 11, in (module)
from . import refactor
ValueError: Attempted relative import in non-package
Was sollte ich anders machen? Ich meine, ich muss ja irgendwie angeben können, welches Modul von 2 nach 3 konvertiert werden soll. Was mich auch wundert ist, dass es mit MacOs offenbar viel einfacher ist, da kann einfach an einer beliebigen Stelle 2to3 module.py eingegeben werden und es funktioniert.
Bei mir ist das etwas anders:
das Programm "2to3" befindet sich in
C:\Program Files\python_301\Lib\lib2to3
Genauer gesagt, es gibt eigentlich kein Programm das genau "2to3" heisst, sonder nur ein Modul das "main.py" heisst. Ich habe jetzt in einer cmd-shell dieses Verzeichnis geöffnet und >python main.py ausgeführt, aber eine Fehlermeldung bekommen.
Traceback (most recent call last):
File "main.py", line 11, in (module)
from . import refactor
ValueError: Attempted relative import in non-package
Was sollte ich anders machen? Ich meine, ich muss ja irgendwie angeben können, welches Modul von 2 nach 3 konvertiert werden soll. Was mich auch wundert ist, dass es mit MacOs offenbar viel einfacher ist, da kann einfach an einer beliebigen Stelle 2to3 module.py eingegeben werden und es funktioniert.
@mzh: Das Programm befindet sich, wie Du ja schon selber herausgefunden hast, dort nicht, bzw. fehlt Dir anscheinend der "Starter", der die `lib2to3` verwendet. Was liegt denn in dem `bin/`-Verzeichnis dieser Python-Installation?
HalloBlackJack hat geschrieben:@mzh: Das Programm befindet sich, wie Du ja schon selber herausgefunden hast, dort nicht, bzw. fehlt Dir anscheinend der "Starter", der die `lib2to3` verwendet. Was liegt denn in dem `bin/`-Verzeichnis dieser Python-Installation?
Hm, bei mir ist der Verzeichnisbaum so:
"C:\Program Files\python_301\Lib\lib2to3"
Da gibt es kein \bin-Verzeichnis. Wenn das \bin-Verzeichnis aber das Verzeichnis sein soll, in dem sich alle Files befinden, die durch die Python-Installation erstellt wurden (also \python_301), dann hat es da ein paar Ordner und drei .exe-Files drin (DLL, Doc, include, Lib, libs, tcl, Tools, *.txt, python.exe, pythonw.exe, w9xpopen.exe).
Super. Funktioniert.Darii hat geschrieben:Eigentlich gibt es da doch nur einen Ordner in dem Werkzeuge versteckt sein könnten und mehr als RTFM kann man dazu dann auch nicht sagen. Alternativ hilft auch Google oder die Windows-Suche.
Ich würde aber trotzdem sehr gerne wissen (und ich wäre echt dankbar dafür, wenn man mir sagen könnte, wie man das macht) was ich tun muss, damit ich "2to3" über die cmd-Shell von jedem Verzeichnis aus starten kann.
Ich musste jetzt in das oben genannte Verzeichnis wechseln, und dann
>2to3.py -w ..\..\..\..\Studium\MA\python_beginning\bonds.py
eingeben. Mein Kollege kann auf seinem Mac einfach ins Verzeichnis gehen, wo die Datei liegt, die er verändern möchte und dann
>2to3 bonds.py
eingeben. Wieso geht das bei mir nicht? Bzw. wieso wird der Befehl nur erkannt, wenn man sich gerade in dem Verzeichnis befindet, wo sich das Programm drin befindet? Notepad kann ich ja auch von überall her starten!
Danke sehr.Leonidas hat geschrieben:Weil der Ordner von Notepad im %PATH% liegt und der von ``2to3`` nicht. Wie man das ändert steht in den FAQ.
Wie man es ändert, denke ich, weiss ich. DASS es geändert werden muss, und in welcher Situation, davon verstehe ich wenig.
Wenn ich es richtig (!?) verstehe, dann bedeutet das, dass ich der PATH-Variable noch den Pfad zum "2to3.py" hinzufügen muss. Wie gesagt, wie soll man als Nicht-Systemtechniker darauf kommen?
@mzh: Was heisst "Nicht-Systemtechniker"? Als Programmierer muss man halt so viel Wissen über sein System haben, wie Programme vom System gefunden und ausgeführt werden. Und wer ausser Programmierern braucht `2to3.py`?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Generell: je mehr man von seinem System versteht desto besser. Ich bin ja immer wieder total fasziniert von den PHP-Leuten die ihre Skripte schreiben, aber eigentlich gar nicht wissen wie HTTP funktioniert.BlackJack hat geschrieben:Als Programmierer muss man halt so viel Wissen über sein System haben, wie Programme vom System gefunden und ausgeführt werden.
Daher: bevor man anfängt zu programmieren besser eine möglichst breite Wissensbasis schaffen. Also zum Beispiel die guten alten Suse (nun Millin) Handbücher lesen, Dinge einrichten, ausprobieren etc. Da bleibt schon irgendwas hängen und spätestens wenn man etwas in der Richtung programmieren will/muss kommt sowas sehr nützlich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Unter OSX liegt 2to3 im bin-Ordner. Gibt es da unter Windows nicht so einen Scripts-Verzeichnis? Da müsste doch ein `2to3.bat`o.ä. zu finden sein.mzh hat geschrieben:Hm, bei mir ist der Verzeichnisbaum so:
"C:\Program Files\python_301\Lib\lib2to3"
Stefan
Danke echt für eure Antworten. Tja, wer braucht 2to3.py? Ich glaub ich fang gar nicht erst an... Der Punkt ist, der Prof hat mir gesagt, ich soll das machen. Da bleibt einem nicht viel anderes übrig, als die Suppe auszulöffeln.
Gruss
PS: Noch eine weitere Frage (ist Off-Topic, ich hoffe macht nichts):
Gibt es ein Programm, dass mir aus den 20-30 .py-Files, die ich in einem Verzeichnis habe und die ein ganzes Programm darstellen, ein UML-Diagramm erstellt?
Gruss
PS: Noch eine weitere Frage (ist Off-Topic, ich hoffe macht nichts):
Gibt es ein Programm, dass mir aus den 20-30 .py-Files, die ich in einem Verzeichnis habe und die ein ganzes Programm darstellen, ein UML-Diagramm erstellt?
Zuletzt geändert von mzh am Samstag 7. März 2009, 23:02, insgesamt 1-mal geändert.
Jop, also es gibt /Tools/Scripts/2to3.pysma hat geschrieben:Unter OSX liegt 2to3 im bin-Ordner. Gibt es da unter Windows nicht so einen Scripts-Verzeichnis? Da müsste doch ein `2to3.bat`o.ä. zu finden sein.mzh hat geschrieben:Hm, bei mir ist der Verzeichnisbaum so:
"C:\Program Files\python_301\Lib\lib2to3"
Stefan
Danke, wusste nicht, dass man das auch so machen kann. Geht das auch mit einigen Dutzend Scripts auf einmal?HWK hat geschrieben:Erstell Dir doch eine Desktop-Verknüpfung von 2to3.py (evtl. mit den benötigten Parametern wie z.B. -w) und ziehe die Scripts, die Du konvertieren willst, einfach auf das Icon.
MfG
HWK
Ähnliches Themamzh hat geschrieben:PS: Noch eine weitere Frage (ist Off-Topic, ich hoffe macht nichts):
Gibt es ein Programm, dass mir aus den 20-30 .py-Files, die ich in einem Verzeichnis habe und die ein ganzes Programm darstellen, ein UML-Diagramm erstellt?
MfG
HWK
Wunderbar.
Ich habe jetzt der Pfad-Variable noch einen Pfad zum \Scripts-Verzeichnis hinzugefügt und ich kann jetzt von jedem Verzeichnis aus die Skripte die dort drin sind aufrufen. Wunderbar. Recht herzlichen Dank für eure Tipps.
Was würde dann eigentlich dagegen sprechen, in %PATH% einen Pfad zu setzen, der das \Program Files-Verzeichnis enthält? So dass jedes Programm das darin enthalten ist, aufgerufen werden kann?
Ich habe jetzt der Pfad-Variable noch einen Pfad zum \Scripts-Verzeichnis hinzugefügt und ich kann jetzt von jedem Verzeichnis aus die Skripte die dort drin sind aufrufen. Wunderbar. Recht herzlichen Dank für eure Tipps.
Was würde dann eigentlich dagegen sprechen, in %PATH% einen Pfad zu setzen, der das \Program Files-Verzeichnis enthält? So dass jedes Programm das darin enthalten ist, aufgerufen werden kann?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das würde nicht funktionieren, denn in dem Ordner sind üblicherweise die Ordner der Programme, nicht die EXE-Dateien selbst. Du müsstest also quasi jedes Programm einzeln mit Pfad in %PATH% eintragen.mzh hat geschrieben:Was würde dann eigentlich dagegen sprechen, in %PATH% einen Pfad zu setzen, der das \Program Files-Verzeichnis enthält? So dass jedes Programm das darin enthalten ist, aufgerufen werden kann?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Aha, ja das habe ich mir schon fast gedacht. Was mich einfach irritiert ist die Tatsache, dass trotz der nicht zu überschätzenden Bedeutung dieser Path-Variablen, kein vernünftiges Editierfenster dazu gemacht wurde. Ich finde es eine Zumutung, zwanzig Pfade in einem Zeileneintrag machen zu müssen, der sich nicht mal vergrössern lässt. Und das ist wohl schon über mehrere Versionen von Windows so.Leonidas hat geschrieben:Das würde nicht funktionieren, denn in dem Ordner sind üblicherweise die Ordner der Programme, nicht die EXE-Dateien selbst. Du müsstest also quasi jedes Programm einzeln mit Pfad in %PATH% eintragen.mzh hat geschrieben:Was würde dann eigentlich dagegen sprechen, in %PATH% einen Pfad zu setzen, der das \Program Files-Verzeichnis enthält? So dass jedes Programm das darin enthalten ist, aufgerufen werden kann?
Wenn ich das richtig verstehe, dann gibt es auch keine Möglichkeit, der Übersicht halber, für jede EXE-Datei, eine eigene Path-Variable zu setzen:
PATH1 = C:\Programme\Matlab
PATH2 = C:\Programme\Photoshop
etc.
So dass man ein bisschen die Übersicht hat.