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. ..
python setup.py install
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