Convertir le code python 3.x en python 2.x

Contexte

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é. ..

Installez 3to2

  1. Téléchargez le zip depuis https://pypi.python.org/pypi/3to2
  2. Ouvrez le zip et cd 3to2-x.x.x
  3. python setup.py install

Essayez 3to2

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

Convertir le code python 3.x en python 2.x
Réécrire le code Python2 en Python3 (2to3)
Script Python pour convertir la latitude et la longitude en code de maillage
Convertir le code de maillage cubique en WKT en Python
[python] Convertir la date en chaîne
[Python] Convertir la liste en Pandas [Pandas]
2.x, 3.x code de caractères des séries python
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Convertir Markdown en PDF en Python
Workflow pour convertir une formule (image) en python
Convertir la liste en DataFrame avec python
Python> liste> Convertir une double liste en une seule liste
[Python] Convertit les nombres naturels en nombres ordinaux
Convertir décimal en n-aire [python]
Python> tuple> Convertir un double tuple en un seul tuple
[Python] Comment convertir un fichier db en csv
Mis à jour vers Python 2.7.9
Convertir un mémo à la fois avec Python 2to3
Convertir en HSV
Convertir Python> séquence de deux valeurs en dictionnaire
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Convertir un fichier psd en png en Python
Convertir des données Excel en JSON avec python
Convertir Hiragana en Romaji avec Python (bêta)
code de caractère python
Comment effacer Python 2.x sur Mac.
Convertissez des données FX 1 minute en données 5 minutes avec Python
python> Convertir le tuple en liste> aList = list (pi_tuple)
[Python] Code conscient des algorithmes
Convertir des nombres chinois en nombres arabes avec Python
Convertir de Markdown en HTML en Python
Convertir une URL absolue en URL relative en Python
"Backport" vers python 2
Exemple de conversion en ondelettes d'images en Python
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
Convertir le fichier FBX en ASCII <-> BINARY en Python
Convertir un PDF en image (JPEG / PNG) avec Python
Convertir le «nombre» de date Excel en date / heure Python
Convertissez des PDF en images en masse avec Python
[Python] Conversion de DICOM en PNG ou CSV
Convertir un fichier svg en png / ico avec Python
Notes personnelles sur le code doc Python dans Sphinx
[Automation] Convertissez le code Python en fichier exe
Excel X Python La technique de travail la plus rapide
[Algorithm x Python] Comment utiliser la liste
Convertir STL en maillage Voxel à l'aide de Python VTK
Liste de code Python à déplacer et à mémoriser
Convertir le code de caractère du fichier avec Python3
Convertir un float exponentiel en str en Python
Je veux créer du code C ++ à partir de code Python!
[Blender x Python] Pensez au code avec des symboles
Convertir une chaîne au format de liste caractère par caractère avec python
Comment installer Python