J'utilise python3 depuis longtemps, mais c'est un nouveau développement, et je l'ai écrit en 3 car il a été développé en python2, mais à la fin, j'avais besoin de l'unifier, alors je l'ai étudié. ..
cd 3to2-x.x.x
python setup.py install
Vous pouvez vérifier l'option en tapant la commande suivante dans le terminal
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
Pour le moment, j'ai décidé d'écrire directement en utilisant -w
(désactiver Branch). Sinon, seule la partie qui passe de 3 à 2 sera affichée.
3to2 -w aaaa.py
Courez et réussissez!
# Autre
Cependant, cela seul peut toujours provoquer une erreur.
## 1. Code de caractère lié
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
Dans ce cas, écrivez `# coding = <encoding name>` sur la première ligne en fonction de la prise en charge d'aucune URL.
Dans la partie Nom d'encodage, écrivez ʻutf-8`
## 2. Toutes les chaînes sont précédées de ʻu`, ce qui provoque une erreur
TypeError: "delimiter" must be string, not unicode
Par exemple, convertir un dataframe pandas:
Avant la conversion (python3)
`df.to_csv('aaa.tsv', sep='\t')`
Après la conversion (python2)
`df.to_csv(u'aaa.tsv', sep=u'\t')`
Et il dit `TypeError:" delimiter "doit être une chaîne, pas unicode`.
Supprimer ʻu` avant sep = '\ t'
## 3. De même, une erreur mystérieuse apparaît dans la partie `to_csv`.
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
En Python2, il semble que csv ne supporte pas l'Unicode, donc
Ajoutez ʻencoding = 'utf-8'`,
df.to_csv('aaa.tsv', sep='\t', encoding='utf-8')
Si oui, il sera résolu
## 4. cld2 ne peut plus être installé
Après avoir créé python 2.7.6
`pip intall cld2` échoue et l'erreur` No package'libffi 'found` apparaît
Pour Mac
Installez avec `brew install libffi`. → Succès
Je ne suis pas sûr parce que je ne l'ai pas fait pour Ubuntu, mais est-il correct d'utiliser ʻapt-get install libffi` ou `libffi-dev`? .. ??
## 5. Erreur mystère 2 liée à Unicode
TypeError: initializer for ctype 'char *' must be a str or list or tuple, not unicode
Celui passé à cld2 ci-dessus était unicode, alors changez-le comme suit
Changer avant
reliable, _, lang = cld2.detect(name)
Après le changement
reliable, _, lang = cld2.detect(name.encode('utf-8'))
# Conclusion de l'erreur
Python2 a beaucoup d'erreurs en Unicode, alors soyez prudent!
# prime
## contrôle de version
Pour ceux qui utilisent à la fois Python 2 et 3, il peut être pratique d'utiliser `pyenv` et de le séparer par Local.
### Vérifiez la version dont vous disposez
pyenv versions
### Installez la version requise
pyenv install 2.7.10
### Définir localement
pyenv local 2.7.10
Cela créera un fichier appelé .python-verion avec la version à l'intérieur. Si vous supprimez ce fichier, vous pouvez utiliser la version globale de python.
## Notez la version Python d'exécution 3to2
J'ai installé python3, donc on dit qu'il n'y a pas de commande `3to2` à l'endroit où j'ai changé en version locale python2 avec pyenv. Ainsi, lors de la modification de plusieurs fichiers, vous devez réfléchir à l'opportunité de passer à python2 ou d'installer à la fois python3 et 2 après la modification en exécutant `3to2` dans python3.
Recommended Posts