Как Вы - планирование обработки миграции к Python 3?

, если вы находитесь в окнах (что бы это казалось)

откройте командную строку и введите

[path to your python_folder]\scripts\pip.exe install [package name]

, например, если ваш питон установлен в C: \ и вы используете 2.7.

C:\Python27\Scripts\pip.exe install Python-LinkedIn

(или pip[versionumber].exe)

52
задан Jason Baker 5 October 2008 в 17:08
поделиться

5 ответов

Вот общий план относительно Скрученного. Я первоначально собирался занести это в блог, но тогда я думал: почему блог об этом, когда я мог добраться точки для него?

  1. Ожидают, пока кто-то не заботится.

    Прямо сейчас, ни у кого нет Python 3. Мы не собираемся тратить набор усилия, пока по крайней мере один фактический пользователь не приехал дальше и сказал, что "Мне нужна поддержка Python 3.0", и имеет серьезное основание для него кроме факта это 3,0 блестящие взгляда.

  2. Ожидают, пока наши зависимости не мигрировали.

    А большой системе нравится Скрученный, имеет много зависимостей. Для начала, наши включают:

    , Некоторые из этих проектов имеют их собственный массив зависимостей, таким образом, мы должны будем ожидать тех также.

  3. Ожидают, пока кто-то не заботится достаточно для помощи .

    существуют, милосердно, 5 человек, которые продолжают работать Скрученные - и я говорю "милосердно", потому что это считает меня, и я не фиксировал в месяцах. Мы имеем более чем 1 000 открытых билетов прямо сейчас, и было бы хорошо на самом деле зафиксировать некоторые из тех —, исправляют ошибки, добавляют опции, и обычно делают Скрученными лучший продукт самостоятельно —, прежде, чем провести время при получении его портировало к существенно новой версии языка.

    Это потенциально включает спонсоры забота достаточно для оплаты за нас, чтобы сделать это, но я надеюсь, что будет приток волонтеров, которые заботятся о приблизительно 3,0 поддержке и хотят помочь переместить сообщество вперед.

  4. Следуют совету Guido.

    Это означает , мы не изменим наш API несовместимо , и мы будем следовать переходные инструкции по разработке , тот Guido отправил в прошлом году. Это запускается с наличия модульных тестов и выполнения 2to3 инструмент преобразования по Скрученной кодовой базе.

  5. Сообщают об ошибках против, и патчи файла для, 2to3 инструмент .

    , Когда мы переходим к сути дела, где мы на самом деле используем его, я ожидаю, что будет много проблем с выполнением 2to3 в будущем. Работа его Скрученный прямо сейчас чрезвычайно занимает много времени и (в последний раз, я проверил, который был долгое время назад), не может проанализировать несколько файлов в Скрученном репозитории, таким образом, получающийся вывод не импортирует. Я думаю, что должно будет быть изрядное количество историй успеха из маленьких проектов и большого стука на инструменте, прежде чем это будет на самом деле работать на нас.

    Однако группа разработчиков Python была очень полезна в ответе на наши отчеты об ошибках, и ранние ответы на эти проблемы воодушевили, таким образом, я ожидаю, что все эти проблемы будут устранены вовремя.

  6. Поддерживают 2.x совместимость в течение нескольких лет.

    Прямо сейчас, Скрученный python 2.3 поддержек к 2,5. В настоящее время мы работаем над 2,6 поддержкой (который мы должны будем, очевидно, закончить прежде 3.0!). Наш план, мы пересматриваем наши поддерживаемые версии Python на основе долгосрочных поддерживаемых версий [1 116] Ubuntu - выпуск 8.04, который включает Python 2.5, будет поддерживаться до 2013. Согласно совету Guido мы должны будем отбросить поддержку 2,5 для поддержки 3.0, но я надеюсь, что мы можем найти путь вокруг того (мы являемся довольно творческими со взломами совместимости версий).

    Так, мы планируем поддерживать Python 2.5 до, по крайней мере, 2013. Через два года Ubuntu выпустит другую долгосрочную поддерживаемую версию Ubuntu: если они все еще существуют и остаются по графику, который будет 10.04. Лично я предполагаю, что это будет поставляться с Python 2.x, возможно, python 2.8, как /usr/bin/python, потому что существует огромная сумма программного обеспечения Python, упакованного с распределением, и будет требоваться много времени для обновления всего этого. Так, пять лет от [1 120] тогда , в 2015, мы можем начать смотреть на отбрасывание 2.x поддержка.

    В течение этого периода, мы продолжим следовать совету Guido о миграции: выполнение 2to3 по нашему 2.x кодовая база и изменение 2.x кодовая база для хранения ее тестовой передачи в обеих версиях.

    результат этого - то, что Python 3.x не будет источник язык для Скрученного, пока много позже того, как моего 35-го дня рождения — это не будет целевая среда выполнения (и ряд инструкций и ограничений) для моего Python 2.x код. Я ожидаю писать программы в Python 2.x в течение следующих десяти лет или около этого.

Так, это - план. Я надеюсь, что это заканчивает тем, что выглядело смехотворно консервативным через год или так; то, что 3.x переход легок как круг, и все быстро обновляют. Другие вещи могли произойти, также: 2.x и 3.x ответвления могли сходиться, кто-то мог бы закончить тем, что писал 3to2, или другое время выполнения (PyPy приходит на ум), мог бы допускать выполнение 2.x и 3.x код в том же процессе непосредственно, делая наш процесс преобразования легче.

В настоящее время, однако, мы предполагаем, что много лет у нас будут люди с большими кодовыми базами, которые они поддерживают (или люди, пишущие новый код, кто хочет использовать другой библиотеки, которые еще не были перемещены), кто все еще хочет новые возможности и исправления ошибок в Скрученном. Довольно скоро я ожидаю, что у нас также будут новейшие пользователи, которые хотят использовать Скрученный на python 3. Я хотел бы предоставить всем тем людям с положительным опытом максимально долго.

90
ответ дан Jean-Paul Calderone 7 November 2019 в 19:16
поделиться

Поддерживать оба варианта

Я хотел попытаться преобразовать библиотеку BeautifulSoup в 3х для проекта, над которым я работаю, но я понимаю, насколько сложно было бы поддерживать два разных ветки кода.

Текущая модель для обработки этого включает:

  1. внести изменения в 2x ветвь
  2. запустить 2to3
  3. молиться, чтобы преобразование было выполнено правильно при первом запуске
  4. кода
  5. run unit тесты, чтобы убедиться, что все работает
  6. скопируйте вывод в ветвь 3x

Эта модель работает, но ИМХО - отстой. Для каждого изменения / выпуска вы должны пройти следующие шаги :: sigh ::. Кроме того, это отговаривает разработчиков от расширения ветки 3x новыми функциями, которые могут поддерживаться только в py3k, потому что вы по-прежнему ориентируете весь код на 2x.

Решение ... использовать препроцессор

Поскольку я не смог найти достойного препроцессора в стиле c с директивами #define и #ifdef для python, я написал его.

Он называется pypreprocessor и его можно найти в PYPI

По сути, вы делаете следующее:

  1. import pypreprocessor
  2. определяете, в какой версии python выполняется скрипт
  3. , установите ' определить 'в препроцессоре для версии (например,' python2 'или' python3 ')
  4. добавить директивы' #ifdef python2 'и' #ifdef python3 ', где код зависит от версии
  5. запустить код

Это Это. Теперь он будет работать как в 2x, так и в 3x.Если вас беспокоит дополнительное снижение производительности при запуске препроцессора, есть также режим, который удаляет все метаданные и выводит постобработанный источник в файл.

Лучше всего ... вам нужно выполнить преобразование 2 в 3 только один раз.

Вот рабочий пример:

#!/usr/bin/env python
# py2and3.py

import sys
from pypreprocessor import pypreprocessor

#exclude
if sys.version[:3].split('.')[0] == '2':
    pypreprocessor.defines.append('python2')
if sys.version[:3].split('.')[0] == '3':
    pypreprocessor.defines.append('python3')

pypreprocessor.parse()
#endexclude
#ifdef python2
print('You are using Python 2x')
#ifdef python3
print('You are using python 3x')
#else
print('Python version not supported')
#endif

Вот результаты в терминале:

 python py2and3.py
 >>>You are using Python 2x 
 python3 py2and3.py
 >>>You are using python 3x

Если вы хотите вывести в файл и создать чистый исходный файл, зависящий от версии, без дополнительных метаданных, добавьте эти две строки где-то перед оператором pypreprocessor.parse ():

pypreprocessor.output = outputFileName.py
pypreprocessor.removeMeta = True

Затем:

python py2and3.py

Создает файл с именем outputFileName.py, специфичный для python 2x, без дополнительных метаданных.

python3 py2and3.py

Создает файл с именем outputFileName.py, специфичный для Python 3x, без дополнительных метаданных.

Для документации и других примеров см. pypreprocessor в GoogleCode .

Я искренне надеюсь, что это поможет. Мне нравится писать код на Python, и я надеюсь увидеть прогресс поддержки в 3 раза в ближайшее время. Ненавижу, когда язык не прогрессирует. Тем более, что версия 3x разрешает многие из представленных WTF и делает синтаксис более удобным для пользователей, переходящих с других языков.

Документация на данный момент полная, но не обширная. Я постараюсь в ближайшее время добавить в вики более обширную информацию.

Обновление:

Хотя я разработал pypreprocessor специально для решения этой проблемы, он не работает, потому что лексер выполняет проверку синтаксиса всего кода перед выполнением любого кода.

Если бы у python была реальная поддержка директив препроцессора C, это позволило бы разработчикам писать код python2x и python3k рядом друг с другом в одном файле, но из-за плохой репутации препроцессора C (злоупотребление заменой макросов для изменения ключевых слов языка) I не вижу, чтобы в ближайшее время в python добавилась законная поддержка препроцессора C.

3
ответ дан 7 November 2019 в 09:16
поделиться

Разговор как автор библиотеки:

я ожидаю окончательной версии, которая будет выпущена. Моя вера, как этот большей части сообщества Python, состоит в том, что 2.x продолжит быть доминирующей версией сроком на недели или месяцы. Это - много времени для выпуска хорошего, полируемого 3.x выпуск.

я буду поддерживать отдельный 2.x и 3.x ответвления. 2.x будет назад совместимо с 2,4, таким образом, я не могу использовать много необычного синтаксиса или новых возможностей в 2,6 / 3.0. Напротив, 3.x ответвление использует каждые из тех функций, которые приводят к более хорошему опыту для пользователя. Набор тестов будет изменен так, чтобы 2to3 работал на него, и я поддержу те же тесты для обоих ответвлений.

3
ответ дан John Millikin 7 November 2019 в 19:16
поделиться

Некоторые мои более сложные 2.x код собираются остаться в 2,5 или 2.6. Я перехожу на 3,0 для всей новой разработки однажды некоторые сторонние библиотеки, которыми я пользуюсь, часто обновлялись для 3.

0
ответ дан Corey Goldberg 7 November 2019 в 19:16
поделиться

Основная идея 2,6 состоит в том, чтобы обеспечить миграционный путь к 3,0. Таким образом, можно использовать from __future__ import X медленно миграция одной функции за один раз, пока Вы не закрепили всех их и можете переместиться в 3,0. Многие из этих 3,0 функций будут течь в 2,6 также, таким образом, можно будет сделать разрыв языка меньшим постепенно вместо того, чтобы иметь необходимость переместить все сразу.

На работе, мы планируем обновить от 2,5 до 2,6 сначала. Тогда мы начинаем активировать 3,0 опции медленно один модуль за один раз. В какой-то момент целое подразделение системы, вероятно, будет готово к 3.x.

единственная проблема библиотеки. Если библиотека никогда не перемещается, мы застреваем со старой библиотекой. Но я довольно уверен, что мы получим прекрасную альтернативу в установленный срок для той части.

5
ответ дан I GIVE CRAP ANSWERS 7 November 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: