Konvertieren Sie Python 3.x-Code in Python 2.x.

Hintergrund

Ich benutze Python3 schon lange, aber es ist eine neue Entwicklung, und ich habe es in 3 geschrieben, weil es in Python2 entwickelt wurde, aber am Ende musste ich es vereinheitlichen, also habe ich es untersucht. ..

Installieren Sie 3to2

  1. Laden Sie die Zip-Datei von https://pypi.python.org/pypi/3to2 herunter
  2. Öffnen Sie den Reißverschluss und "cd 3to2-x.x.x"
  3. python setup.py install

Versuchen Sie 3to2

Sie können die Option überprüfen, indem Sie den folgenden Befehl in das Terminal eingeben

3to2 --help
Usage: 3to2 [options] file|dir ...

Options:
  -h, --help            show this help message and exit
  -d, --doctests_only   Fix up doctests only
  -f FIX, --fix=FIX     Each FIX specifies a transformation; default: all
  -j PROCESSES, --processes=PROCESSES
                        Run 3to2 concurrently
  -x NOFIX, --nofix=NOFIX
                        Prevent a fixer from being run.
  -l, --list-fixes      List available transformations (fixes/fix_*.py)
  -v, --verbose         More verbose logging
  -w, --write           Write back modified files
  -n, --nobackups       Don't write backups for modified files.
  --no-diffs            Don't show diffs of the refactoring

Vorerst werde ich direkt mit -w schreiben (Branch ausschalten). Andernfalls wird nur der Teil angezeigt, der sich von 3 auf 2 ändert.

3to2 -w aaaa.py



 Laufen und erfolgreich sein!

# Andere

 Dies allein kann jedoch immer noch einen Fehler verursachen.

## 1. Zeichencode bezogen

SyntaxError: Non-ASCII character '\xe6' in file aaaa.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

 In diesem Fall schreiben Sie "#oding = <Codierungsname>" in die erste Zeile, je nachdem, ob keine URL unterstützt wird.
 Sie können "utf-8" in den Teil "Codierungsname" schreiben.

## 2. Allen Zeichenfolgen wird "u" vorangestellt, was einen Fehler verursacht

TypeError: "delimiter" must be string, not unicode


 Wenn Sie beispielsweise einen Pandas-Datenrahmen konvertieren:


 Vor der Konvertierung (python3)
`df.to_csv('aaa.tsv', sep='\t')`

 Nach der Konvertierung (python2)
`df.to_csv(u'aaa.tsv', sep=u'\t')`

 Und es heißt "TypeError:" Trennzeichen "muss ein String sein, kein Unicode".
 Entfernen Sie das "u" vor sep = "\ t".

## 3. In ähnlicher Weise erscheint ein mysteriöser Fehler im Teil `to_csv`.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

 In Python2 scheint CSV Unicode nicht zu unterstützen

 Fügen Sie `encoding = 'utf-8'` und hinzu

df.to_csv('aaa.tsv', sep='\t', encoding='utf-8')


 Wenn ja, wird es gelöst

## 4. cld2 kann nicht mehr installiert werden

 Nach dem Erstellen von Python 2.7.6

 `pip intall cld2` schlägt fehl und der Fehler` No package'libffi 'found` wird angezeigt

 Für Mac
 Installieren Sie mit `Brew install libffi`. → Erfolg

 Ich bin mir nicht sicher, weil ich es nicht für Ubuntu gemacht habe, aber ist es in Ordnung, "apt-get install libffi" oder "libffi-dev" zu verwenden? .. ??

## 5. Unicode-bezogener Rätselfehler 2

TypeError: initializer for ctype 'char *' must be a str or list or tuple, not unicode

 Der oben an cld2 übergebene war Unicode. Ändern Sie ihn daher wie folgt

 Vorher ändern

reliable, _, lang = cld2.detect(name)


 Nach der veränderung

reliable, _, lang = cld2.detect(name.encode('utf-8'))



# Schlussfolgerung aus Fehler

 Python2 hat viele Fehler in Unicode, seien Sie also vorsichtig!


# Bonus

## Versionskontrolle
 Für diejenigen, die sowohl Python 2 als auch Python verwenden, kann es zweckmäßig sein, `pyenv` zu verwenden und es nach Local zu trennen.

### Überprüfen Sie, welche Version Sie haben

pyenv versions


### Installieren Sie die erforderliche Version

pyenv install 2.7.10


### Lokal einstellen

pyenv local 2.7.10


 Dadurch wird eine Datei namens .python-verion mit der darin enthaltenen Version erstellt. Wenn Sie diese Datei löschen, können Sie die globale Python-Version verwenden.


## Beachten Sie die Python-Version für die 3to2-Ausführung
 Seit ich python3 installiert habe, gibt es an der Stelle, an der ich mit pyenv auf die lokale Version python2 umgestellt habe, keinen Befehl "3to2". Wenn Sie also mehrere Dateien ändern, müssen Sie sich überlegen, ob Sie nach dem Ändern zu Python2 wechseln oder sowohl Python3 als auch 2 installieren möchten, indem Sie "3to2" in Python3 ausführen.


Recommended Posts

Konvertieren Sie Python 3.x-Code in Python 2.x.
Schreiben Sie Python2-Code in Python3 um (2to3)
Python-Skript zum Konvertieren von Breiten- und Längengrad in Mesh-Code
Konvertieren Sie kubischen Netzcode in Python in WKT
[Python] Datum in Zeichenfolge konvertieren
[Python] Liste in Pandas konvertieren [Pandas]
2.x, 3.x Serienzeichencode von Python
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie Markdown in Python in PDF
Workflow zum Konvertieren der Formel (Bild) in Python
Konvertieren Sie die Liste mit Python in DataFrame
Python> Liste> Doppelte Liste in einfache Liste konvertieren
[Python] Konvertiert natürliche Zahlen in Ordnungszahlen
Konvertieren Sie die Dezimalzahl in n-ary [Python]
Python> Tupel> Konvertiert doppeltes Tupel in einzelnes Tupel
[Python] So konvertieren Sie eine Datenbankdatei in CSV
Auf Python 2.7.9 aktualisiert
Konvertieren Sie Memos sofort mit Python 2to3
Zum HSV konvertieren
Konvertieren Sie Python> Zwei-Wert-Sequenz in Wörterbuch
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Python] Konvertieren Sie CSV-Dateibegrenzer in Tabulatortrennzeichen
Konvertieren Sie die psd-Datei in Python in png
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertiere Hiragana mit Python (Beta) in Romaji
Python-Zeichencode
So löschen Sie Python 2.x auf einem Mac.
Python> Tupel in Liste konvertieren> aList = Liste (pi_tuple)
[Python] Code, der Algorithmen kennt
Konvertieren Sie chinesische Zahlen mit Python in arabische Zahlen
In Python von Markdown in HTML konvertieren
Konvertieren Sie die absolute URL in eine relative URL in Python
"Backport" zu Python 2
Beispiel für die Wavelet-Konvertierung von Bildern in Python
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Konvertieren Sie die "Anzahl" des Excel-Datums in die Python-Datumszeit
Konvertieren Sie PDFs mit Python in Massenbilder
[Python] Konvertieren von DICOM in PNG oder CSV
Konvertieren Sie die SVG-Datei mit Python in png / ico
Persönliche Notizen zum Dokumentieren von Python-Code in Sphinx
[Automatisierung] Konvertieren Sie Python-Code in eine exe-Datei
Excel X Python Die schnellste Arbeitstechnik
[Algorithmus x Python] Verwendung der Liste
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
Liste des zu verschiebenden und zu merkenden Python-Codes
Konvertieren Sie den Zeichencode der Datei mit Python3
Konvertieren Sie den exponentiellen Float in Python in str
Ich möchte C ++ - Code aus Python-Code erstellen!
[Blender x Python] Denken Sie an Code mit Symbolen
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat
So installieren Sie Python