diff --git a/howto/pyporting.po b/howto/pyporting.po index e68bc9de..6fca01fb 100644 --- a/howto/pyporting.po +++ b/howto/pyporting.po @@ -6,17 +6,18 @@ msgstr "" "Project-Id-Version: Python 3.6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-06-10 11:27+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2019-09-05 10:42+0200\n" "Language-Team: FRENCH \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Last-Translator: \n" +"X-Generator: Poedit 2.2.1\n" #: ../Doc/howto/pyporting.rst:5 msgid "Porting Python 2 Code to Python 3" -msgstr "" +msgstr "Portage de code Python 2 vers Python 3" #: ../Doc/howto/pyporting.rst:0 msgid "author" @@ -24,7 +25,7 @@ msgstr "auteur" #: ../Doc/howto/pyporting.rst:7 msgid "Brett Cannon" -msgstr "" +msgstr "Brett Cannon" #: ../Doc/howto/pyporting.rst:None msgid "Abstract" @@ -37,12 +38,18 @@ msgid "" "Python. This guide is meant to help you figure out how best to support both " "Python 2 & 3 simultaneously." msgstr "" +"Python 3 étant le futur de Python tandis que Python 2 est encore activement " +"utilisé, il est préférable de faire en sorte que votre projet soit " +"disponible pour les deux versions majeures de Python. Ce guide est destiné à " +"vous aider à comprendre comment gérer simultanément Python 2 & 3." #: ../Doc/howto/pyporting.rst:16 msgid "" "If you are looking to port an extension module instead of pure Python code, " "please see :ref:`cporting-howto`." msgstr "" +"Si vous cherchez à porter un module d'extension plutôt que du pur Python, " +"veuillez consulter :ref:`cporting-howto`." #: ../Doc/howto/pyporting.rst:19 msgid "" @@ -50,54 +57,71 @@ msgid "" "came into existence, you can read Nick Coghlan's `Python 3 Q & A`_ or Brett " "Cannon's `Why Python 3 exists`_." msgstr "" +"Si vous souhaitez lire l'avis d'un développeur principal de Python sur ce " +"qui a motivé la création de Python 3, vous pouvez lire le `Python 3 Q & A`_ " +"de Nick Coghlan ou bien `Why Python 3 exists`_ de Brett Cannon." #: ../Doc/howto/pyporting.rst:23 msgid "" "For help with porting, you can email the python-porting_ mailing list with " "questions." msgstr "" +"Vous pouvez solliciter par courriel l'aide de la liste de diffusion python-" +"porting_ pour vos questions liées au portage." #: ../Doc/howto/pyporting.rst:27 msgid "The Short Explanation" -msgstr "" +msgstr "La version courte" #: ../Doc/howto/pyporting.rst:29 msgid "" "To make your project be single-source Python 2/3 compatible, the basic steps " "are:" msgstr "" +"Afin de rendre votre projet compatible Python 2/3 avec le même code source, " +"les étapes de base sont :" #: ../Doc/howto/pyporting.rst:32 msgid "Only worry about supporting Python 2.7" -msgstr "" +msgstr "Ne se préoccuper que du support de Python 2.7" #: ../Doc/howto/pyporting.rst:33 msgid "" "Make sure you have good test coverage (coverage.py_ can help; ``pip install " "coverage``)" msgstr "" +"S'assurer d'une bonne couverture des tests (coverage.py_ peut aider ; ``pip " +"install coverage``)" #: ../Doc/howto/pyporting.rst:35 ../Doc/howto/pyporting.rst:116 msgid "Learn the differences between Python 2 & 3" -msgstr "" +msgstr "Apprendre les différences entre Python 2 et 3" #: ../Doc/howto/pyporting.rst:36 msgid "" "Use Futurize_ (or Modernize_) to update your code (e.g. ``pip install " "future``)" msgstr "" +"Utiliser Futurize_ (ou Modernize_) pour mettre à jour votre code (par " +"exemple ``pip install future``)" #: ../Doc/howto/pyporting.rst:37 +#, fuzzy msgid "" "Use Pylint_ to help make sure you don't regress on your Python 3 support " "(``pip install pylint``)" msgstr "" +"Utiliser Pylint_ pour faciliter la détection de régressions concernant la " +"compatibilité Python 3 (``pip install pylint``)" #: ../Doc/howto/pyporting.rst:39 msgid "" "Use caniusepython3_ to find out which of your dependencies are blocking your " "use of Python 3 (``pip install caniusepython3``)" msgstr "" +"Utiliser caniusepython3_ pour déterminer quelles sont, parmi les dépendances " +"que vous utilisez, celles qui bloquent votre utilisation de Python 3 (``pip " +"install caniusepython3``)" #: ../Doc/howto/pyporting.rst:41 msgid "" @@ -105,6 +129,10 @@ msgid "" "integration to make sure you stay compatible with Python 2 & 3 (tox_ can " "help test against multiple versions of Python; ``pip install tox``)" msgstr "" +"Une fois que vos dépendances ne sont plus un obstacle, utiliser " +"l'intégration continue pour s'assurer que votre code demeure compatible " +"Python 2 & 3 (tox_ peut aider à tester la comptabilité de sources avec " +"plusieurs versions de Python; ``pip install tox``)" #: ../Doc/howto/pyporting.rst:44 msgid "" @@ -112,6 +140,9 @@ msgid "" "works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both " "Python 2 & Python 3)." msgstr "" +"Envisager l'utilisation d'un vérifieur de type statique afin de vous assurer " +"que votre façon d'utiliser les types est compatible avec Python 2 et 3 (par " +"exemple en utilisant mypy_ pour vérifier votre typage sous Python 2 et 3)." #: ../Doc/howto/pyporting.rst:50 msgid "Details" @@ -125,6 +156,12 @@ msgid "" "3. Most changes required to support Python 3 lead to cleaner code using " "newer practices even in Python 2 code." msgstr "" +"Un point clé du support simultané de Python 2 et 3 est qu'il vous est " +"possible de commencer **dès aujourd'hui** ! Même si vos dépendances ne sont " +"pas encore compatibles Python 3, vous pouvez moderniser votre code **dès " +"maintenant** pour gérer Python 3. La plupart des modifications nécessaires à " +"la compatibilité Python 3 donnent un code plus propre utilisant une syntaxe " +"plus récente, même dans du code Python 2." #: ../Doc/howto/pyporting.rst:58 msgid "" @@ -134,16 +171,25 @@ msgid "" "lower-level work is now mostly done for you and thus can at least benefit " "from the automated changes immediately." msgstr "" +"Un autre point important est que la modernisation de votre code Python 2 " +"pour le rendre compatible Python 3 est pratiquement automatique. Bien qu'il " +"soit possible d'avoir à effectuer des changements d'API compte-tenu de la " +"clarification de la gestion des données textuelles et binaires dans Python " +"3, le travail de bas niveau est en grande partie fait pour vous et vous " +"pouvez ainsi bénéficiez de ces modifications automatiques immédiatement." #: ../Doc/howto/pyporting.rst:64 msgid "" "Keep those key points in mind while you read on about the details of porting " "your code to support Python 2 & 3 simultaneously." msgstr "" +"Gardez ces points-clés en tête pendant que vous lisez les détails ci-dessous " +"concernant le portage de votre code vers une compatibilité simultanée Python " +"2 et 3." #: ../Doc/howto/pyporting.rst:69 msgid "Drop support for Python 2.6 and older" -msgstr "" +msgstr "Abandon de la compatibilité Python 2.6 et antérieures" #: ../Doc/howto/pyporting.rst:71 msgid "" @@ -153,6 +199,12 @@ msgid "" "simultaneously (``pip install six``). Do realize, though, that nearly all " "the projects listed in this HOWTO will not be available to you." msgstr "" +"Bien qu'il soit possible de rendre Python 2.5 compatible avec Python 3, il " +"est **beaucoup** plus simple de n'avoir qu'à travailler avec Python 2.7. Si " +"abandonner Python 2.5 n'est pas une option, alors le projet six_ peut vous " +"aider à gérer simultanément Python 2.5 et 3 (``pip install six``). " +"Néanmoins, soyez conscient que la quasi-totalité des projets listés dans ce " +"guide pratique ne seront pas applicables à votre situation." #: ../Doc/howto/pyporting.rst:77 msgid "" @@ -162,6 +214,12 @@ msgid "" "or have to import a function instead of using a built-in one, but otherwise " "the overall transformation should not feel foreign to you." msgstr "" +"Si vous pouvez ignorer Python 2.5 et antérieur, les changements nécessaires " +"à appliquer à votre code devraient encore ressembler à vos yeux à du code " +"Python idiomatique. Dans le pire cas, vous devrez utiliser une fonction " +"plutôt qu'une méthode dans certains cas, ou bien vous devrez importer une " +"fonction plutôt qu'utiliser une fonction native, mais le reste du temps le " +"code transformé devrait vous rester familier." #: ../Doc/howto/pyporting.rst:83 msgid "" @@ -173,11 +231,22 @@ msgid "" "simply be easier for you if you only support the versions of Python that you " "have to support." msgstr "" +"Mais nous vous conseillons de viser seulement un support de Python 2.7. " +"Python 2.6 n'est plus supporté gratuitement et par conséquent ne reçoit plus " +"aucun correctif. Cela signifie que **vous** devrez trouver des solutions de " +"contournement aux problèmes que vous rencontrez avec Python 2.6. Il existe " +"en outre des outils mentionnés dans ce guide pratique qui ne supportent pas " +"Python 2.6 (par exemple Pylint_), ce qui sera de plus en plus courant au fil " +"du temps. Il est simplement plus facile pour vous de n'assurer une " +"compatibilité qu'avec les versions de Python que vous avez l'obligation de " +"gérer." #: ../Doc/howto/pyporting.rst:92 msgid "" "Make sure you specify the proper version support in your ``setup.py`` file" msgstr "" +"Assurez vous de spécifier la bonne version supportée dans le fichier ``setup." +"py``" #: ../Doc/howto/pyporting.rst:94 msgid "" @@ -188,10 +257,16 @@ msgid "" "minor version of Python that you do support, e.g. ``Programming Language :: " "Python :: 2.7``." msgstr "" +"Votre fichier ``setup.py`` devrait contenir le bon `trove classifier`_ " +"spécifiant les versions de Python avec lesquelles vous êtes compatible. " +"Comme votre projet ne supporte pas encore Python 3, vous devriez au moins " +"spécifier ``Programming Language :: Python :: 2 :: Only``. Dans l'idéal vous " +"devriez indiquer chaque version majeure/mineure de Python que vous gérez, " +"par exemple ``Programming Language :: Python :: 2.7``." #: ../Doc/howto/pyporting.rst:103 msgid "Have good test coverage" -msgstr "" +msgstr "Obtenir une bonne couverture de code" #: ../Doc/howto/pyporting.rst:105 msgid "" @@ -204,6 +279,16 @@ msgid "" "get better than 90% coverage). If you don't already have a tool to measure " "test coverage then coverage.py_ is recommended." msgstr "" +"Une fois que votre code est compatible avec la plus ancienne version de " +"Python 2 que vous souhaitez, vous devez vous assurer que votre suite de test " +"a une couverture suffisante. Une bonne règle empirique consiste à avoir " +"suffisamment confiance en la suite de test pour qu'une erreur apparaissant " +"après la réécriture du code par les outils automatiques résulte de bogues de " +"ces derniers et non de votre code. Si vous souhaitez une valeur cible, " +"essayez de dépasser les 80 % de couverture (et ne vous sentez pas coupable " +"si vous trouvez difficile de faire mieux que 90 % de couverture). Si vous ne " +"disposez pas encore d'un outil pour mesurer la couverture de code, coverage." +"py_ est recommandé." #: ../Doc/howto/pyporting.rst:118 msgid "" @@ -215,10 +300,18 @@ msgid "" "and the `Porting to Python 3`_ book (which is free online). There is also a " "handy `cheat sheet`_ from the Python-Future project." msgstr "" +"Une fois que votre code est bien testé, vous êtes prêt à démarrer votre " +"portage vers Python 3 ! Mais afin de comprendre comment votre code va " +"changer et à quoi s'intéresser spécifiquement pendant que vous codez, vous " +"aurez sûrement envie de découvrir quels sont les changements introduits par " +"Python 3 par rapport à Python 2. Pour atteindre cet objectif, les deux " +"meilleurs moyens sont de lire le document `\"What's New\"`_ de chaque " +"version de Python 3 et le livre `Porting to Python 3`_ (gratuit en ligne). " +"Il y a également une `cheat sheet`_ très pratique du projet Python-Future." #: ../Doc/howto/pyporting.rst:128 msgid "Update your code" -msgstr "" +msgstr "Mettre à jour votre code" #: ../Doc/howto/pyporting.rst:130 msgid "" @@ -234,6 +327,20 @@ msgid "" "future, it might be best to consider Futurize to begin adjusting to any new " "practices that Python 3 introduces which you are not accustomed to yet." msgstr "" +"Une fois que vous pensez en savoir suffisamment sur les différences entre " +"Python 3 et Python 2, il est temps de mettre à jour votre code ! Vous avez " +"le choix entre deux outils pour porter votre code automatiquement : " +"Futurize_ et Modernize_. Le choix de l'outil dépend de la dose de Python 3 " +"que vous souhaitez introduire dans votre code. Futurize_ s'efforce " +"d'introduire les idiomes et pratiques de Python 3 dans Python 2, par exemple " +"en réintroduisant le type ``bytes`` de Python 3 de telle sorte que la " +"sémantique soit identique entre les deux versions majeures de Python. En " +"revanche, Modernize_ est plus conservateur et vise un sous-ensemble " +"d'instructions Python 2/3, en s'appuyant directement sur six_ pour la " +"compatibilité. Python 3 étant le futur de Python, il pourrait être " +"préférable d'utiliser *Futurize* afin de commencer à s'ajuster aux nouvelles " +"pratiques introduites par Python 3 avec lesquelles vous n'êtes pas encore " +"habitué." #: ../Doc/howto/pyporting.rst:142 msgid "" @@ -246,6 +353,16 @@ msgid "" "transform your application code knowing that any tests which fail is a " "translation failure." msgstr "" +"Indépendamment de l'outil sur lequel se porte votre choix, celui-ci mettra à " +"jour votre code afin qu'il puisse être exécuté par Python 3 tout en " +"maintenant sa compatibilité avec la version de Python 2 dont vous êtes " +"parti. En fonction du niveau de prudence que vous visez, vous pouvez " +"exécuter l'outil sur votre suite de test d'abord puis inspecter visuellement " +"la différence afin de vous assurer que la transformation est exacte. Après " +"avoir transformé votre suite de test et vérifié que tous les tests " +"s'exécutent comme attendu, vous pouvez transformer le code de votre " +"application avec l'assurance que chaque test qui échoue correspond à un " +"échec de traduction." #: ../Doc/howto/pyporting.rst:150 msgid "" @@ -260,6 +377,18 @@ msgid "" "watch out for which can be considered large issues that may be hard to debug " "if not watched for." msgstr "" +"Malheureusement les outils ne peuvent pas automatiser tous les changements " +"requis pour permettre à votre code de s'exécuter sous Python 3 et il y a " +"donc quelques points sur lesquels vous devrez travailler manuellement afin " +"d'atteindre la compatibilité totale Python 3 (les étapes nécessaires peuvent " +"varier en fonction de l'outil utilisé). Lisez la documentation de l'outil " +"que vous avez choisi afin d'identifier ce qu'il corrige par défaut et ce qui " +"peut être appliqué de façon optionnelle afin de savoir ce qui sera (ou non) " +"corrigé pour vous ou ce que vous devrez modifier vous-même (par exemple, le " +"remplacement ``io.open()`` plutôt que la fonction native ``open()`` est " +"inactif par défaut dans *Modernize*). Heureusement, il n'y a que quelques " +"points à surveiller qui peuvent réellement être considérés comme des " +"problèmes difficiles à déboguer si vous n'y prêtez pas attention." #: ../Doc/howto/pyporting.rst:162 msgid "Division" @@ -275,16 +404,27 @@ msgid "" "Q`` flag. If you have not been doing this then you will need to go through " "your code and do two things:" msgstr "" +"Dans Python 3, ``5 / 2 == 2.5`` et non ``2``; toutes les divisions entre des " +"valeurs ``int`` renvoient un ``float``. Ce changement était en réalité " +"planifié depuis Python 2.2, publié en 2002. Depuis cette date, les " +"utilisateurs ont été encouragés à ajouter ``from __future__ import " +"division`` à tous les fichiers utilisant les opérateurs ``/`` et ``//`` ou à " +"exécuter l'interpréteur avec l'option ``-Q``. Si vous n'avez pas suivi cette " +"recommandation, vous devrez manuellement modifier votre code et effectuer " +"deux changements :" #: ../Doc/howto/pyporting.rst:172 msgid "Add ``from __future__ import division`` to your files" -msgstr "" +msgstr "Ajouter ``from __future__ import division`` à vos fichiers" #: ../Doc/howto/pyporting.rst:173 msgid "" "Update any division operator as necessary to either use ``//`` to use floor " "division or continue using ``/`` and expect a float" msgstr "" +"Remplacer tous les opérateurs de division par ``//`` pour la division " +"entière, le cas échant, ou utiliser ``/`` et vous attendre à un résultat " +"flottant" #: ../Doc/howto/pyporting.rst:176 msgid "" @@ -293,10 +433,16 @@ msgid "" "then your code would begin to fail (e.g. a user-defined class that uses ``/" "`` to signify some operation but not ``//`` for the same thing or at all)." msgstr "" +"La raison pour laquelle ``/`` n'est pas simplement remplacé par ``//`` " +"automatiquement est que si un objet définit une méthode ``__truediv__`` mais " +"pas de méthode ``__floordiv__``, alors votre code pourrait produire une " +"erreur (par exemple, une classe définie par l'utilisateur qui utilise ``/`` " +"pour définir une opération quelconque mais pour laquelle ``//`` n'a pas du " +"tout la même signification, voire n'est pas utilisé du tout)." #: ../Doc/howto/pyporting.rst:183 msgid "Text versus binary data" -msgstr "" +msgstr "Texte et données binaires" #: ../Doc/howto/pyporting.rst:185 msgid "" @@ -309,6 +455,16 @@ msgid "" "supporting multiple languages as APIs wouldn't bother explicitly supporting " "``unicode`` when they claimed text data support." msgstr "" +"Dans Python 2, il était possible d'utiliser le type ``str`` pour du texte et " +"pour des données binaires. Malheureusement cet amalgame entre deux concepts " +"différents peut conduire à du code fragile pouvant parfois fonctionner pour " +"les deux types de données et parfois non. Cela a également conduit à des API " +"confuses si les auteurs ne déclaraient pas explicitement que quelque chose " +"qui acceptait ``str`` était compatible avec du texte ou des données binaires " +"et pas un seul des deux types. Cela a compliqué la situation pour les " +"personnes devant gérer plusieurs langages avec des API qui ne se " +"préoccupaient pas de la gestion de ``unicode`` lorsqu'elles affirmaient être " +"compatibles avec des données au format texte." #: ../Doc/howto/pyporting.rst:194 msgid "" @@ -321,6 +477,15 @@ msgid "" "it does mean you might have to now care about when you are using text " "compared to binary data, which is why this cannot be entirely automated." msgstr "" +"Afin de rendre la distinction entre texte et données binaires claire et " +"prononcée, Python 3 a suivi la voie pavée par la plupart des langages créés " +"à l'ère d'Internet et a séparé les types texte et données binaires de telle " +"sorte qu'il ne soit plus possible de les confondre (Python est antérieur à " +"la démocratisation de l'accès à Internet). Cette séparation ne pose pas de " +"problème pour du code ne gérant soit que du texte, soit que des données " +"binaires. Cependant un code source devant gérer les deux doit désormais se " +"préoccuper du type des données manipulées, ce qui explique que ce processus " +"ne peut pas être entièrement automatisé." #: ../Doc/howto/pyporting.rst:203 msgid "" @@ -341,38 +506,57 @@ msgid "" "Python 3 doesn't have the method). Do note that as of Python 3.5 the " "``__mod__`` method was added to the bytes type." msgstr "" +"Pour commencer, vous devrez choisir quelles API travaillent sur du texte et " +"lesquelles travaillent avec des données binaires (il est **fortement** " +"recommandé de ne pas concevoir d'API qui gèrent les deux types compte-tenu " +"de la difficulté supplémentaire que cela induit). Dans Python 2, cela " +"signifie s'assurer que les API recevant du texte en entrée peuvent gérer " +"``unicode`` et celles qui reçoivent des données binaires fonctionnent avec " +"le type ``bytes`` de Python 3 (qui est un sous-ensemble de ``str`` dans " +"Python 2 et opère comme un alias du type ``bytes`` de Python 2). En général, " +"le principal problème consiste à inventorier quelles méthodes existent et " +"opèrent sur quel type dans Python & 3 simultanément (pour le texte, il " +"s'agit de ``unicode`` dans Python 2 et ``str`` dans Python 3, pour le " +"binaire il s'agit de ``str``/``bytes`` dans Python 2 et ``bytes`` dans " +"Python 3). Le tableau ci-dessous liste les méthodes **spécifiques** à chaque " +"type de données dans Python 2 et 3 (par exemple, la méthode ``decode()`` " +"peut être utilisée sur des données binaires équivalentes en Python 2 et 3, " +"mais ne peut pas être utilisée de la même façon sur le type texte en Python " +"2 et 3 car le type ``str`` de Python 3 ne possède pas de telle méthode). " +"Notez que depuis Python 3.5, la méthode ``__mod__`` a été ajoutée au type " +"*bytes*." #: ../Doc/howto/pyporting.rst:220 msgid "**Text data**" -msgstr "" +msgstr "**Format texte**" #: ../Doc/howto/pyporting.rst:220 msgid "**Binary data**" -msgstr "" +msgstr "**Format binaire**" #: ../Doc/howto/pyporting.rst:222 msgid "\\" -msgstr "" +msgstr "\\" #: ../Doc/howto/pyporting.rst:222 msgid "decode" -msgstr "" +msgstr "decode" #: ../Doc/howto/pyporting.rst:224 msgid "encode" -msgstr "" +msgstr "encode" #: ../Doc/howto/pyporting.rst:226 msgid "format" -msgstr "" +msgstr "format" #: ../Doc/howto/pyporting.rst:228 msgid "isdecimal" -msgstr "" +msgstr "isdecimal" #: ../Doc/howto/pyporting.rst:230 msgid "isnumeric" -msgstr "" +msgstr "isnumeric" #: ../Doc/howto/pyporting.rst:233 msgid "" @@ -383,6 +567,14 @@ msgid "" "possible. This allows your code to work with only text internally and thus " "eliminates having to keep track of what type of data you are working with." msgstr "" +"Vous pouvez rendre le problème plus simple à gérer en réalisant les " +"opérations d'encodage et de décodage entre données binaires et texte aux " +"extrémités de votre code. Cela signifie que lorsque vous recevez du texte " +"dans un format binaire, vous devez immédiatement le décoder. À l'inverse si " +"votre code doit transmettre du texte sous forme binaire, encodez-le le plus " +"tard possible. Cela vous permet de ne manipuler que du texte à l'intérieur " +"de votre code et permet de ne pas se préoccuper du type des données sur " +"lesquelles vous travaillez." #: ../Doc/howto/pyporting.rst:240 msgid "" @@ -393,6 +585,14 @@ msgid "" "unspecified literals to be Unicode, but usage has shown it isn't as " "effective as adding a ``b`` or ``u`` prefix to all literals explicitly)" msgstr "" +"Le point suivant est de s'assurer que vous savez quelles chaînes de " +"caractères littérales de votre code correspondent à du texte ou à du " +"binaire. Vous devez préfixer par ``b`` tous les littéraux qui représentent " +"des données binaires et par ``u`` les littéraux qui représentent du texte " +"(il existe une importation du module :mod:`__future__` permettant de forcer " +"l'encodage de toutes les chaînes de caractères littérales non spécifiées en " +"Unicode, mais cette pratique s'est avérée moins efficace que l'ajout " +"explicite des préfixe ``b`` et ``u``)." #: ../Doc/howto/pyporting.rst:247 msgid "" @@ -411,6 +611,22 @@ msgid "" "`codecs.open` as that's only necessary for keeping compatibility with Python " "2.5." msgstr "" +"Une conséquence de cette dichotomie est que vous devez être prudents lors de " +"l'ouverture d'un fichier. À moins que vous travailliez sous Windows, il y a " +"des chances pour que vous ne vous soyez jamais préoccupé de spécifier le " +"mode ``b`` lorsque vous ouvrez des fichiers binaires (par exemple ``rb`` " +"pour lire un fichier binaire). Sous Python 3, les fichiers binaire et texte " +"sont distincts et mutuellement incompatibles ; se référer au module :mod:" +"`io` pour plus de détails. Ainsi vous **devez** décider lorsque vous ouvrez " +"un fichier si vous y accéderez en mode binaire (ce qui permet de lire et " +"écrire des données binaires) ou en mode texte (ce qui permet de lire et " +"écrire du texte). Vous devez également utiliser :func:`io.open` pour ouvrir " +"des fichiers plutôt que la fonction native :func:`open` étant donné que le " +"module :mod:`io` est cohérent de Python 2 à 3, ce qui n'est pas vrai pour la " +"fonction :func:`open` (en Python 3, il s'agit en réalité de :func:`io." +"open`). Ne cherchez pas à appliquer l'ancienne pratique consistant à " +"utiliser :func:`codecs.open` qui n'est nécessaire que pour préserver une " +"compatibilité avec Python 2.5." #: ../Doc/howto/pyporting.rst:261 msgid "" @@ -424,6 +640,16 @@ msgid "" "back: ``str(b'3') == b'3'``. But in Python 3 you get the string " "representation of the bytes object: ``str(b'3') == \"b'3'\"``." msgstr "" +"Les constructeurs des types ``str`` et ``bytes`` possèdent une sémantique " +"différente pour les mêmes arguments sous Python 2 et 3. Passer un entier à " +"``bytes`` sous Python 2 produit une représentation de cet entier en chaîne " +"de caractères : ``bytes(3) == '3'``. Mais sous Python 3, fournir un argument " +"entier à ``bytes`` produit un objet *bytes* de la longueur de l'entier " +"spécifié, rempli par des octets nuls : ``bytes(3) == b'\\x00\\x00\\x00'``. " +"La même prudence est nécessaire lorsque vous passez un objet *bytes* à " +"``str``. En Python 2, vous récupérez simplement l'objet *bytes* initial : " +"``str(b'3') == b'3'``. Mais en Python 3, vous récupérez la représentation en " +"chaîne de caractères de l'objet *bytes* : ``str(b'3') == \"b'3'\"``." #: ../Doc/howto/pyporting.rst:271 msgid "" @@ -436,14 +662,25 @@ msgid "" "``six.indexbytes()`` which will return an integer like in Python 3: ``six." "indexbytes(b'123', 1)``." msgstr "" +"Enfin, l'indiçage des données binaires exige une manipulation prudente (bien " +"que le découpage, ou *slicing* en anglais, ne nécessite pas d'attention " +"particulière). En Python 2, ``b'123'[1] == b'2'`` tandis qu'en Python 3 " +"``b'123'[1] == 50``. Puisque les données binaires ne sont simplement qu'une " +"collection de nombres en binaire, Python 3 renvoie la valeur entière de " +"l'octet indicé. Mais en Python 2, étant donné que ``bytes == str``, " +"l'indiçage renvoie une tranche de longueur 1 de *bytes*. Le projet six_ " +"dispose d'une fonction appelée ``six.indexbytes()`` qui renvoie un entier " +"comme en Python 3 : ``six.indexbytes(b'123', 1)``." #: ../Doc/howto/pyporting.rst:280 msgid "To summarize:" -msgstr "" +msgstr "Pour résumer :" #: ../Doc/howto/pyporting.rst:282 msgid "Decide which of your APIs take text and which take binary data" msgstr "" +"Décidez lesquelles de vos API travaillent sur du texte et lesquelles " +"travaillent sur des données binaires" #: ../Doc/howto/pyporting.rst:283 msgid "" @@ -451,32 +688,43 @@ msgid "" "and code for binary data works with ``bytes`` in Python 2 (see the table " "above for what methods you cannot use for each type)" msgstr "" +"Assurez vous que votre code travaillant sur du texte fonctionne aussi avec " +"le type ``unicode`` et que le code travaillant sur du binaire fonctionne " +"avec le type ``bytes`` en Python 2 (voir le tableau ci-dessus pour la liste " +"des méthodes utilisables par chaque type)" #: ../Doc/howto/pyporting.rst:286 msgid "" "Mark all binary literals with a ``b`` prefix, textual literals with a ``u`` " "prefix" msgstr "" +"Préfixez tous vos littéraux binaires par ``b`` et toutes vos chaînes de " +"caractères littérales par ``u``" #: ../Doc/howto/pyporting.rst:288 msgid "" "Decode binary data to text as soon as possible, encode text as binary data " "as late as possible" msgstr "" +"Décodez les données binaires en texte dès que possible, encodez votre texte " +"au format binaire le plus tard possible" #: ../Doc/howto/pyporting.rst:290 msgid "" "Open files using :func:`io.open` and make sure to specify the ``b`` mode " "when appropriate" msgstr "" +"Ouvrez les fichiers avec la fonction :func:`io.open` et assurez-vous de " +"spécifier le mode ``b`` le cas échéant" #: ../Doc/howto/pyporting.rst:292 msgid "Be careful when indexing into binary data" -msgstr "" +msgstr "Utilisez avec prudence l'indiçage sur des données binaires" #: ../Doc/howto/pyporting.rst:296 msgid "Use feature detection instead of version detection" msgstr "" +"Utilisez la détection de fonctionnalités plutôt que la détection de version" #: ../Doc/howto/pyporting.rst:298 msgid "" @@ -487,6 +735,13 @@ msgid "" "version check be against Python 2 and not Python 3. To help explain this, " "let's look at an example." msgstr "" +"Vous rencontrerez inévitablement du code devant décider quoi faire en " +"fonction de la version de Python qui s'exécute. La meilleure façon de gérer " +"ce cas est de détecter si les fonctionnalités dont vous avez besoin sont " +"gérées par la version de Python sous laquelle le code s'exécute. Si pour " +"certaines raisons cela ne fonctionne pas, alors vous devez tester si votre " +"version est Python 2 et non Python 3. Afin de clarifier cette pratique, " +"voici un exemple." #: ../Doc/howto/pyporting.rst:305 msgid "" @@ -495,6 +750,11 @@ msgid "" "Python 2 through importlib2_ on PyPI. You might be tempted to write code to " "access e.g. the ``importlib.abc`` module by doing the following::" msgstr "" +"Supposons que vous avez besoin d'accéder à une fonctionnalité de importlib_ " +"qui n'est disponible dans la bibliothèque standard de Python que depuis la " +"version 3.3 et est disponible pour Python 2 via le module importlib2_ sur " +"PyPI. Vous pourriez être tenté d'écrire un code qui accède, par exemple, au " +"module ``importlib.abc`` avec l'approche suivante : ::" #: ../Doc/howto/pyporting.rst:317 msgid "" @@ -503,6 +763,10 @@ msgid "" "assume that future Python versions will be more compatible with Python 3 " "than Python 2::" msgstr "" +"Le problème est le suivant : que se passe-t-il lorsque Python 4 est publié ? " +"Il serait préférable de traiter le cas Python 2 comme l'exception plutôt que " +"Python 3 et de supposer que les versions futures de Python 2 seront plus " +"compatibles avec Python 3 qu'avec Python 2 : ::" #: ../Doc/howto/pyporting.rst:329 msgid "" @@ -510,10 +774,15 @@ msgid "" "rely on feature detection. That avoids any potential issues of getting the " "version detection wrong and helps keep you future-compatible::" msgstr "" +"Néanmoins la meilleure solution est de ne pas chercher à déterminer la " +"version de Python mais plutôt à détecter les fonctionnalités disponibles. " +"Cela évite les problèmes potentiels liés aux erreurs de détection de version " +"et facilite la compatibilité future : ::" #: ../Doc/howto/pyporting.rst:340 +#, fuzzy msgid "Prevent compatibility regressions" -msgstr "" +msgstr "Éviter les régressions de compatibilité" #: ../Doc/howto/pyporting.rst:342 msgid "" @@ -522,12 +791,19 @@ msgid "" "Python 3. This is especially true if you have a dependency which is blocking " "you from actually running under Python 3 at the moment." msgstr "" +"Une fois votre code traduit pour être compatible avec Python 3, vous devez " +"vous assurer que votre code n'a pas régressé ou qu'il ne fonctionne pas sous " +"Python 3. Ceci est particulièrement important si une de vos dépendances vous " +"empêche de réellement exécuter le code sous Python 3 pour le moment." #: ../Doc/howto/pyporting.rst:347 msgid "" "To help with staying compatible, any new modules you create should have at " "least the following block of code at the top of it::" msgstr "" +"Afin de vous aider à maintenir la compatibilité, nous préconisons que tous " +"les nouveaux modules que vous créez aient au moins le bloc de code suivant " +"en en-tête : ::" #: ../Doc/howto/pyporting.rst:354 msgid "" @@ -536,6 +812,11 @@ msgid "" "warnings into errors with ``-Werror`` then you can make sure that you don't " "accidentally miss a warning." msgstr "" +"Vous pouvez également lancer Python 2 avec le paramètre ``-3`` afin d'être " +"alerté en cas de divers problèmes de compatibilité que votre code déclenche " +"durant son exécution. Si vous transformez les avertissements en erreur avec " +"``-Werror``, vous pouvez être certain que ne passez pas accidentellement à " +"côté d'un avertissement." #: ../Doc/howto/pyporting.rst:359 msgid "" @@ -546,10 +827,17 @@ msgid "" "does require you only support Python 2.7 and Python 3.4 or newer as that is " "Pylint's minimum Python version support." msgstr "" +"Vous pouvez également utiliser le projet Pylint_ et son option ``--py3k`` " +"afin de modifier votre code pour recevoir des avertissements lorsque celui-" +"ci dévie de la compatibilité Python 3. Cela vous évite par ailleurs " +"d'appliquer Modernize_ ou Futurize_ sur votre code régulièrement pour " +"détecter des régressions liées à la compatibilité. Cependant cela nécessite " +"de votre part le support de Python 2.7 et Python 3.4 ou ultérieur étant " +"donné qu'il s'agit de la version minimale gérée par Pylint." #: ../Doc/howto/pyporting.rst:368 msgid "Check which dependencies block your transition" -msgstr "" +msgstr "Vérifier quelles dépendances empêchent la migration" #: ../Doc/howto/pyporting.rst:370 msgid "" @@ -560,6 +848,12 @@ msgid "" "is both a command-line tool as well as a web interface at https://" "caniusepython3.com." msgstr "" +"**Après** avoir rendu votre code compatible avec Python 3, vous devez " +"commencer à vous intéresser au portage de vos dépendances. Le projet " +"caniusepython3_ a été créé afin de vous aider à déterminer quels projets " +"sont bloquants dans votre support de Python 3, directement ou indirectement. " +"Il existe un outil en ligne de commande ainsi qu'une interface web : https://" +"caniusepython3.com." #: ../Doc/howto/pyporting.rst:377 msgid "" @@ -569,10 +863,17 @@ msgid "" "manually check your dependencies and to be notified quickly when you can " "start running on Python 3." msgstr "" +"Le projet fournit également du code intégrable dans votre suite de test qui " +"déclenchera un échec de test lorsque plus aucune de vos dépendances n'est " +"bloquante pour l'utilisation de Python 3. Cela vous permet de ne pas avoir à " +"vérifier manuellement vos dépendances et d'être notifié rapidement quand " +"vous pouvez exécuter votre application avec Python 3." #: ../Doc/howto/pyporting.rst:384 msgid "Update your ``setup.py`` file to denote Python 3 compatibility" msgstr "" +"Mettre à jour votre fichier ``setup.py`` pour spécifier la compatibilité " +"avec Python 3" #: ../Doc/howto/pyporting.rst:386 msgid "" @@ -582,10 +883,16 @@ msgid "" "that you support Python 2 **and** 3. Ideally you will also want to add " "classifiers for each major/minor version of Python you now support." msgstr "" +"Une fois que votre code fonctionne sous Python 3, vous devez mettre à jour " +"vos classeurs dans votre ``setup.py`` pour inclure ``Programming Language :: " +"Python :: 3`` et non seulement le support de Python 2. Cela signifiera à " +"quiconque utilise votre code que vous gérez Python 2 **et** 3. Dans l'idéal " +"vous devrez aussi ajouter une mention pour chaque version majeure/mineure de " +"Python que vous supportez désormais." #: ../Doc/howto/pyporting.rst:394 msgid "Use continuous integration to stay compatible" -msgstr "" +msgstr "Utiliser l'intégration continue pour maintenir la compatibilité" #: ../Doc/howto/pyporting.rst:396 msgid "" @@ -595,6 +902,12 @@ msgid "" "integrate tox with your continuous integration system so that you never " "accidentally break Python 2 or 3 support." msgstr "" +"Une fois que vous êtes en mesure d'exécuter votre code sous Python 3, vous " +"devrez vous assurer que celui-ci fonctionne toujours pour Python 2 & 3. tox_ " +"est vraisemblablement le meilleur outil pour exécuter vos tests avec " +"plusieurs interpréteurs Python. Vous pouvez alors intégrer *tox* à votre " +"système d'intégration continue afin de ne jamais accidentellement casser " +"votre gestion de Python 2 ou 3." #: ../Doc/howto/pyporting.rst:402 msgid "" @@ -607,6 +920,15 @@ msgid "" "these kinds of comparisons occur, making the mistake much easier to track " "down." msgstr "" +"Vous pouvez également utiliser l'option ``-bb`` de l'interpréteur Python 3 " +"afin de déclencher une exception lorsque vous comparez des *bytes* à des " +"chaînes de caractères ou à un entier (cette deuxième possibilité est " +"disponible à partir de Python 3.5). Par défaut, des comparaisons entre types " +"différents renvoient simplement ``False`` mais si vous avez fait une erreur " +"dans votre séparation de la gestion texte/données binaires ou votre indiçage " +"des *bytes*, vous ne trouverez pas facilement le bogue. Ce drapeau lève une " +"exception lorsque ce genre de comparaison apparaît, facilitant ainsi sa " +"identification et sa localisation." #: ../Doc/howto/pyporting.rst:410 msgid "" @@ -615,10 +937,15 @@ msgid "" "don't accidentally break Python 2 or 3 compatibility regardless of which " "version you typically run your tests under while developing." msgstr "" +"Et c'est à peu près tout ! Une fois ceci fait, votre code source est " +"compatible avec Python 2 et 3 simultanément. Votre suite de test est " +"également en place de telle sorte que vous ne cassiez pas la compatibilité " +"Python 2 ou 3 indépendamment de la version que vous utilisez pendant le " +"développement." #: ../Doc/howto/pyporting.rst:417 msgid "Consider using optional static type checking" -msgstr "" +msgstr "Envisager l'utilisation d'un vérificateur de type statique optionnel" #: ../Doc/howto/pyporting.rst:419 msgid "" @@ -632,3 +959,14 @@ msgid "" "binary data, helping to make sure everything functions as expected in both " "versions of Python." msgstr "" +"Une autre façon de faciliter le portage de votre code est d'utiliser un " +"vérificateur de type statique comme mypy_ ou pytype_. Ces outils peuvent " +"être utilisés pour analyser votre code comme s'il était exécuté sous Python " +"2, puis une seconde fois comme s'il était exécuté sous Python 3. " +"L'utilisation double d'un vérificateur de type statique de cette façon " +"permet de détecter si, par exemple, vous faites une utilisation inappropriée " +"des types de données binaires dans une version de Python par rapport à " +"l'autre. Si vous ajoutez les indices optionnels de typage à votre code, vous " +"pouvez alors explicitement déclarer que vos API attendent des données " +"binaires ou du texte, ce qui facilite alors la vérification du comportement " +"de votre code dans les deux versions de Python."