Seite 1 von 2

2to3

Verfasst: Freitag 6. März 2009, 11:23
von mzh
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.

Verfasst: Freitag 6. März 2009, 11:51
von Leonidas
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".

Verfasst: Freitag 6. März 2009, 14:42
von mzh
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.

Verfasst: Freitag 6. März 2009, 16:07
von BlackJack
@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?

Verfasst: Freitag 6. März 2009, 16:46
von mzh
BlackJack 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?
Hallo
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).

Verfasst: Freitag 6. März 2009, 17:22
von Darii
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.

Verfasst: Freitag 6. März 2009, 18:04
von mzh
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.
Super. Funktioniert.
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!

Verfasst: Freitag 6. März 2009, 18:28
von Leonidas
Weil der Ordner von Notepad im %PATH% liegt und der von ``2to3`` nicht. Wie man das ändert steht in den FAQ.

Verfasst: Freitag 6. März 2009, 23:53
von mzh
Leonidas hat geschrieben:Weil der Ordner von Notepad im %PATH% liegt und der von ``2to3`` nicht. Wie man das ändert steht in den FAQ.
Danke sehr.
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?

Verfasst: Samstag 7. März 2009, 00:15
von BlackJack
@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`?

Verfasst: Samstag 7. März 2009, 02:41
von Leonidas
BlackJack hat geschrieben:Als Programmierer muss man halt so viel Wissen über sein System haben, wie Programme vom System gefunden und ausgeführt werden.
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.
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.

Verfasst: Samstag 7. März 2009, 11:38
von sma
mzh hat geschrieben:Hm, bei mir ist der Verzeichnisbaum so:

"C:\Program Files\python_301\Lib\lib2to3"
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.

Stefan

Verfasst: Samstag 7. März 2009, 14:29
von HWK
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

Verfasst: Samstag 7. März 2009, 22:52
von mzh
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?

Verfasst: Samstag 7. März 2009, 22:58
von mzh
sma hat geschrieben:
mzh hat geschrieben:Hm, bei mir ist der Verzeichnisbaum so:

"C:\Program Files\python_301\Lib\lib2to3"
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.

Stefan
Jop, also es gibt /Tools/Scripts/2to3.py

Verfasst: Samstag 7. März 2009, 22:59
von mzh
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
Danke, wusste nicht, dass man das auch so machen kann. Geht das auch mit einigen Dutzend Scripts auf einmal?

Verfasst: Sonntag 8. März 2009, 00:07
von HWK
mzh 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?
Ähnliches Thema
MfG
HWK

Verfasst: Sonntag 8. März 2009, 14:28
von mzh
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?

Verfasst: Sonntag 8. März 2009, 14:55
von Leonidas
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?
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.

Verfasst: Sonntag 8. März 2009, 15:18
von mzh
Leonidas hat geschrieben:
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?
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.
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.
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.