# Copyright (C) 2001-2018, Python Software Foundation # For licence information, see README file. # msgid "" msgstr "" "Project-Id-Version: Python 3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-23 16:16+0200\n" "PO-Revision-Date: 2021-12-11 16:27+0100\n" "Last-Translator: Jean Abou Samra \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" "X-Generator: Poedit 3.0\n" #: howto/pyporting.rst:5 msgid "Porting Python 2 Code to Python 3" msgstr "Portage de code Python 2 vers Python 3" #: howto/pyporting.rst:0 msgid "author" msgstr "auteur" #: howto/pyporting.rst:7 msgid "Brett Cannon" msgstr "Brett Cannon" #: howto/pyporting.rst:None msgid "Abstract" msgstr "Résumé" #: howto/pyporting.rst:11 msgid "" "With Python 3 being the future of Python while Python 2 is still in active " "use, it is good to have your project available for both major releases of " "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." #: 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`." #: howto/pyporting.rst:19 msgid "" "If you would like to read one core Python developer's take on why Python 3 " "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." #: howto/pyporting.rst:24 msgid "" "For help with porting, you can view the archived python-porting_ mailing " "list." msgstr "" "Vous pouvez lire les archives de la liste diffusion python-porting_ dans vos " "recherches sur les questions liées au portage." #: howto/pyporting.rst:27 msgid "The Short Explanation" msgstr "La version courte" #: 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 :" #: howto/pyporting.rst:32 msgid "Only worry about supporting Python 2.7" msgstr "Ne se préoccuper que du support de Python 2.7" #: howto/pyporting.rst:33 msgid "" "Make sure you have good test coverage (coverage.py_ can help; ``python -m " "pip install coverage``)" msgstr "" "S'assurer d'une bonne couverture des tests (coverage.py_ peut aider ; " "``python -m pip install coverage``)" #: howto/pyporting.rst:122 msgid "Learn the differences between Python 2 & 3" msgstr "Apprendre les différences entre Python 2 et 3" #: howto/pyporting.rst:36 msgid "" "Use Futurize_ (or Modernize_) to update your code (e.g. ``python -m pip " "install future``)" msgstr "" "Utiliser Futurize_ (ou Modernize_) pour mettre à jour votre code (par " "exemple ``python -m pip install future``)" #: howto/pyporting.rst:37 msgid "" "Use Pylint_ to help make sure you don't regress on your Python 3 support " "(``python -m pip install pylint``)" msgstr "" "Utilisez Pylint_ pour vous assurer que vous ne régressez pas sur votre prise " "en charge de Python 3 (``python -m pip install pylint``)" #: howto/pyporting.rst:39 msgid "" "Use caniusepython3_ to find out which of your dependencies are blocking your " "use of Python 3 (``python -m 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 (``python -m pip install caniusepython3``)" #: howto/pyporting.rst:41 msgid "" "Once your dependencies are no longer blocking you, use continuous " "integration to make sure you stay compatible with Python 2 & 3 (tox_ can " "help test against multiple versions of Python; ``python -m 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; ``python -m pip install tox``)" #: howto/pyporting.rst:44 msgid "" "Consider using optional static type checking to make sure your type usage " "works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both " "Python 2 & Python 3; ``python -m pip install mypy``)." 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 ; " "``python -m pip install mypy``)." #: howto/pyporting.rst:50 msgid "" "Note: Using ``python -m pip install`` guarantees that the ``pip`` you invoke " "is the one installed for the Python currently in use, whether it be a system-" "wide ``pip`` or one installed within a :ref:`virtual environment `." msgstr "" "Note : L'utilisation de ``python -m pip install`` garantit que le ``pip`` " "invoqué est bien celui installé avec la version de Python que vous utilisez, " "que ce soit un ``pip`` du système ou un ``pip`` installé dans un :ref:" "`environnement virtuel `." #: howto/pyporting.rst:56 msgid "Details" msgstr "Détails" #: howto/pyporting.rst:58 msgid "" "A key point about supporting Python 2 & 3 simultaneously is that you can " "start **today**! Even if your dependencies are not supporting Python 3 yet " "that does not mean you can't modernize your code **now** to support Python " "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." #: howto/pyporting.rst:64 msgid "" "Another key point is that modernizing your Python 2 code to also support " "Python 3 is largely automated for you. While you might have to make some API " "decisions thanks to Python 3 clarifying text data versus binary data, the " "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." #: howto/pyporting.rst:70 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." #: howto/pyporting.rst:75 msgid "Drop support for Python 2.6 and older" msgstr "Abandon de la compatibilité Python 2.6 et antérieures" #: howto/pyporting.rst:77 msgid "" "While you can make Python 2.5 work with Python 3, it is **much** easier if " "you only have to work with Python 2.7. If dropping Python 2.5 is not an " "option then the six_ project can help you support Python 2.5 & 3 " "simultaneously (``python -m 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 (``python -m 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." #: howto/pyporting.rst:83 msgid "" "If you are able to skip Python 2.5 and older, then the required changes to " "your code should continue to look and feel like idiomatic Python code. At " "worst you will have to use a function instead of a method in some instances " "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." #: howto/pyporting.rst:89 msgid "" "But you should aim for only supporting Python 2.7. Python 2.6 is no longer " "freely supported and thus is not receiving bugfixes. This means **you** will " "have to work around any issues you come across with Python 2.6. There are " "also some tools mentioned in this HOWTO which do not support Python 2.6 (e." "g., Pylint_), and this will become more commonplace as time goes on. It will " "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." #: howto/pyporting.rst:98 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``" #: howto/pyporting.rst:100 msgid "" "In your ``setup.py`` file you should have the proper `trove classifier`_ " "specifying what versions of Python you support. As your project does not " "support Python 3 yet you should at least have ``Programming Language :: " "Python :: 2 :: Only`` specified. Ideally you should also specify each major/" "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``." #: howto/pyporting.rst:109 msgid "Have good test coverage" msgstr "Obtenir une bonne couverture de code" #: howto/pyporting.rst:111 msgid "" "Once you have your code supporting the oldest version of Python 2 you want " "it to, you will want to make sure your test suite has good coverage. A good " "rule of thumb is that if you want to be confident enough in your test suite " "that any failures that appear after having tools rewrite your code are " "actual bugs in the tools and not in your code. If you want a number to aim " "for, try to get over 80% coverage (and don't feel bad if you find it hard to " "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é." #: howto/pyporting.rst:124 msgid "" "Once you have your code well-tested you are ready to begin porting your code " "to Python 3! But to fully understand how your code is going to change and " "what you want to look out for while you code, you will want to learn what " "changes Python 3 makes in terms of Python 2. Typically the two best ways of " "doing that is reading the :ref:`\"What's New\" ` doc for " "each release of Python 3 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 :ref:`whatsnew-index` de chaque " "version de Python 3 et le livre `Porting to Python 3`_ (gratuit en ligne, en " "anglais). Il y a également une « antisèche » (`cheat sheet`_, ressource en " "anglais) très pratique du projet Python-Future." #: howto/pyporting.rst:134 msgid "Update your code" msgstr "Mettre à jour votre code" #: howto/pyporting.rst:136 msgid "" "Once you feel like you know what is different in Python 3 compared to Python " "2, it's time to update your code! You have a choice between two tools in " "porting your code automatically: Futurize_ and Modernize_. Which tool you " "choose will depend on how much like Python 3 you want your code to be. " "Futurize_ does its best to make Python 3 idioms and practices exist in " "Python 2, e.g. backporting the ``bytes`` type from Python 3 so that you have " "semantic parity between the major versions of Python. Modernize_, on the " "other hand, is more conservative and targets a Python 2/3 subset of Python, " "directly relying on six_ to help provide compatibility. As Python 3 is the " "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é." #: howto/pyporting.rst:148 msgid "" "Regardless of which tool you choose, they will update your code to run under " "Python 3 while staying compatible with the version of Python 2 you started " "with. Depending on how conservative you want to be, you may want to run the " "tool over your test suite first and visually inspect the diff to make sure " "the transformation is accurate. After you have transformed your test suite " "and verified that all the tests still pass as expected, then you can " "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." #: howto/pyporting.rst:156 msgid "" "Unfortunately the tools can't automate everything to make your code work " "under Python 3 and so there are a handful of things you will need to update " "manually to get full Python 3 support (which of these steps are necessary " "vary between the tools). Read the documentation for the tool you choose to " "use to see what it fixes by default and what it can do optionally to know " "what will (not) be fixed for you and what you may have to fix on your own (e." "g. using ``io.open()`` over the built-in ``open()`` function is off by " "default in Modernize). Luckily, though, there are only a couple of things to " "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." #: howto/pyporting.rst:168 msgid "Division" msgstr "Division" #: howto/pyporting.rst:170 msgid "" "In Python 3, ``5 / 2 == 2.5`` and not ``2``; all division between ``int`` " "values result in a ``float``. This change has actually been planned since " "Python 2.2 which was released in 2002. Since then users have been encouraged " "to add ``from __future__ import division`` to any and all files which use " "the ``/`` and ``//`` operators or to be running the interpreter with the ``-" "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 :" #: howto/pyporting.rst:178 msgid "Add ``from __future__ import division`` to your files" msgstr "Ajouter ``from __future__ import division`` à vos fichiers" #: howto/pyporting.rst:179 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 échéant, ou utiliser ``/`` et vous attendre à un résultat " "flottant" #: howto/pyporting.rst:182 msgid "" "The reason that ``/`` isn't simply translated to ``//`` automatically is " "that if an object defines a ``__truediv__`` method but not ``__floordiv__`` " "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)." #: howto/pyporting.rst:189 msgid "Text versus binary data" msgstr "Texte et données binaires" #: howto/pyporting.rst:191 msgid "" "In Python 2 you could use the ``str`` type for both text and binary data. " "Unfortunately this confluence of two different concepts could lead to " "brittle code which sometimes worked for either kind of data, sometimes not. " "It also could lead to confusing APIs if people didn't explicitly state that " "something that accepted ``str`` accepted either text or binary data instead " "of one specific type. This complicated the situation especially for anyone " "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." #: howto/pyporting.rst:200 msgid "" "To make the distinction between text and binary data clearer and more " "pronounced, Python 3 did what most languages created in the age of the " "internet have done and made text and binary data distinct types that cannot " "blindly be mixed together (Python predates widespread access to the " "internet). For any code that deals only with text or only binary data, this " "separation doesn't pose an issue. But for code that has to deal with both, " "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é." #: howto/pyporting.rst:209 msgid "" "To start, you will need to decide which APIs take text and which take binary " "(it is **highly** recommended you don't design APIs that can take both due " "to the difficulty of keeping the code working; as stated earlier it is " "difficult to do well). In Python 2 this means making sure the APIs that take " "text can work with ``unicode`` and those that work with binary data work " "with the ``bytes`` type from Python 3 (which is a subset of ``str`` in " "Python 2 and acts as an alias for ``bytes`` type in Python 2). Usually the " "biggest issue is realizing which methods exist on which types in Python 2 & " "3 simultaneously (for text that's ``unicode`` in Python 2 and ``str`` in " "Python 3, for binary that's ``str``/``bytes`` in Python 2 and ``bytes`` in " "Python 3). The following table lists the **unique** methods of each data " "type across Python 2 & 3 (e.g., the ``decode()`` method is usable on the " "equivalent binary data type in either Python 2 or 3, but it can't be used by " "the textual data type consistently between Python 2 and 3 because ``str`` in " "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*." #: howto/pyporting.rst:226 msgid "**Text data**" msgstr "**Format texte**" #: howto/pyporting.rst:226 msgid "**Binary data**" msgstr "**Format binaire**" #: howto/pyporting.rst:228 msgid "\\" msgstr "\\" #: howto/pyporting.rst:228 msgid "decode" msgstr "decode" #: howto/pyporting.rst:230 msgid "encode" msgstr "encode" #: howto/pyporting.rst:232 msgid "format" msgstr "format" #: howto/pyporting.rst:234 msgid "isdecimal" msgstr "isdecimal" #: howto/pyporting.rst:236 msgid "isnumeric" msgstr "isnumeric" #: howto/pyporting.rst:239 msgid "" "Making the distinction easier to handle can be accomplished by encoding and " "decoding between binary data and text at the edge of your code. This means " "that when you receive text in binary data, you should immediately decode it. " "And if your code needs to send text as binary data then encode it as late as " "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." #: howto/pyporting.rst:246 msgid "" "The next issue is making sure you know whether the string literals in your " "code represent text or binary data. You should add a ``b`` prefix to any " "literal that presents binary data. For text you should add a ``u`` prefix to " "the text literal. (there is a :mod:`__future__` import to force all " "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``)." #: howto/pyporting.rst:253 msgid "" "As part of this dichotomy you also need to be careful about opening files. " "Unless you have been working on Windows, there is a chance you have not " "always bothered to add the ``b`` mode when opening a binary file (e.g., " "``rb`` for binary reading). Under Python 3, binary files and text files are " "clearly distinct and mutually incompatible; see the :mod:`io` module for " "details. Therefore, you **must** make a decision of whether a file will be " "used for binary access (allowing binary data to be read and/or written) or " "textual access (allowing text data to be read and/or written). You should " "also use :func:`io.open` for opening files instead of the built-in :func:" "`open` function as the :mod:`io` module is consistent from Python 2 to 3 " "while the built-in :func:`open` function is not (in Python 3 it's actually :" "func:`io.open`). Do not bother with the outdated practice of using :func:" "`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." #: howto/pyporting.rst:267 msgid "" "The constructors of both ``str`` and ``bytes`` have different semantics for " "the same arguments between Python 2 & 3. Passing an integer to ``bytes`` in " "Python 2 will give you the string representation of the integer: ``bytes(3) " "== '3'``. But in Python 3, an integer argument to ``bytes`` will give you a " "bytes object as long as the integer specified, filled with null bytes: " "``bytes(3) == b'\\x00\\x00\\x00'``. A similar worry is necessary when " "passing a bytes object to ``str``. In Python 2 you just get the bytes object " "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'\"``." #: howto/pyporting.rst:277 msgid "" "Finally, the indexing of binary data requires careful handling (slicing does " "**not** require any special handling). In Python 2, ``b'123'[1] == b'2'`` " "while in Python 3 ``b'123'[1] == 50``. Because binary data is simply a " "collection of binary numbers, Python 3 returns the integer value for the " "byte you index on. But in Python 2 because ``bytes == str``, indexing " "returns a one-item slice of bytes. The six_ project has a function named " "``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)``." #: howto/pyporting.rst:286 msgid "To summarize:" msgstr "Pour résumer :" #: howto/pyporting.rst:288 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" #: howto/pyporting.rst:289 msgid "" "Make sure that your code that works with text also works with ``unicode`` " "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)" #: howto/pyporting.rst:292 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``" #: howto/pyporting.rst:294 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" #: howto/pyporting.rst:296 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" #: howto/pyporting.rst:298 msgid "Be careful when indexing into binary data" msgstr "Utilisez avec prudence l'indiçage sur des données binaires" #: howto/pyporting.rst:302 msgid "Use feature detection instead of version detection" msgstr "" "Utilisez la détection de fonctionnalités plutôt que la détection de version" #: howto/pyporting.rst:304 msgid "" "Inevitably you will have code that has to choose what to do based on what " "version of Python is running. The best way to do this is with feature " "detection of whether the version of Python you're running under supports " "what you need. If for some reason that doesn't work then you should make the " "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." #: howto/pyporting.rst:311 msgid "" "Let's pretend that you need access to a feature of :mod:`importlib` that is " "available in Python's standard library since Python 3.3 and available for " "Python 2 through importlib2_ on PyPI. You might be tempted to write code to " "access e.g. the :mod:`importlib.abc` module by doing the following::" msgstr "" "Supposons que vous avez besoin d'accéder à une fonctionnalité de :mod:" "`importlib` qui est disponible dans la bibliothèque standard de Python " "depuis la version 3.3, dans celle de Python 2 via le module importlib2_ sur " "*PyPI*. Vous pourriez être tenté d'écrire un code qui accède, par exemple, " "au module :mod:`importlib.abc` avec l'approche suivante ::" #: howto/pyporting.rst:323 msgid "" "The problem with this code is what happens when Python 4 comes out? It would " "be better to treat Python 2 as the exceptional case instead of Python 3 and " "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 ::" #: howto/pyporting.rst:335 msgid "" "The best solution, though, is to do no version detection at all and instead " "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 ::" #: howto/pyporting.rst:346 msgid "Prevent compatibility regressions" msgstr "Prévenir les régressions de compatibilité" #: howto/pyporting.rst:348 msgid "" "Once you have fully translated your code to be compatible with Python 3, you " "will want to make sure your code doesn't regress and stop working under " "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." #: howto/pyporting.rst:353 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 ::" #: howto/pyporting.rst:360 msgid "" "You can also run Python 2 with the ``-3`` flag to be warned about various " "compatibility issues your code triggers during execution. If you turn " "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." #: howto/pyporting.rst:365 msgid "" "You can also use the Pylint_ project and its ``--py3k`` flag to lint your " "code to receive warnings when your code begins to deviate from Python 3 " "compatibility. This also prevents you from having to run Modernize_ or " "Futurize_ over your code regularly to catch compatibility regressions. This " "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." #: howto/pyporting.rst:374 msgid "Check which dependencies block your transition" msgstr "Vérifier quelles dépendances empêchent la migration" #: howto/pyporting.rst:376 msgid "" "**After** you have made your code compatible with Python 3 you should begin " "to care about whether your dependencies have also been ported. The " "caniusepython3_ project was created to help you determine which projects -- " "directly or indirectly -- are blocking you from supporting Python 3. There " "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." #: howto/pyporting.rst:383 msgid "" "The project also provides code which you can integrate into your test suite " "so that you will have a failing test when you no longer have dependencies " "blocking you from using Python 3. This allows you to avoid having to " "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." #: howto/pyporting.rst:390 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" #: howto/pyporting.rst:392 msgid "" "Once your code works under Python 3, you should update the classifiers in " "your ``setup.py`` to contain ``Programming Language :: Python :: 3`` and to " "not specify sole Python 2 support. This will tell anyone using your code " "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." #: howto/pyporting.rst:400 msgid "Use continuous integration to stay compatible" msgstr "Utiliser l'intégration continue pour maintenir la compatibilité" #: howto/pyporting.rst:402 msgid "" "Once you are able to fully run under Python 3 you will want to make sure " "your code always works under both Python 2 & 3. Probably the best tool for " "running your tests under multiple Python interpreters is tox_. You can then " "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." #: howto/pyporting.rst:408 msgid "" "You may also want to use the ``-bb`` flag with the Python 3 interpreter to " "trigger an exception when you are comparing bytes to strings or bytes to an " "int (the latter is available starting in Python 3.5). By default type-" "differing comparisons simply return ``False``, but if you made a mistake in " "your separation of text/binary data handling or indexing on bytes you " "wouldn't easily find the mistake. This flag will raise an exception when " "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 son " "identification et sa localisation." #: howto/pyporting.rst:416 msgid "" "And that's mostly it! At this point your code base is compatible with both " "Python 2 and 3 simultaneously. Your testing will also be set up so that you " "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." #: howto/pyporting.rst:423 msgid "Consider using optional static type checking" msgstr "Envisager l'utilisation d'un vérificateur de type statique optionnel" #: howto/pyporting.rst:425 msgid "" "Another way to help port your code is to use a static type checker like " "mypy_ or pytype_ on your code. These tools can be used to analyze your code " "as if it's being run under Python 2, then you can run the tool a second time " "as if your code is running under Python 3. By running a static type checker " "twice like this you can discover if you're e.g. misusing binary data type in " "one version of Python compared to another. If you add optional type hints to " "your code you can also explicitly state whether your APIs use textual or " "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."