2013-12-19 2 views
2

В принципе, я программист на Java, который хочет изучить язык Python. Я хочу уточнить, почему некоторые из библиотек python распространяются с помощью непортативного способа.Проблемы с переносимостью Python

Позвольте мне объяснить свои мысли. Если кто-то создает библиотеку регулярных используя Java он готовит 1 (один) файл JAR, который может использоваться на различных платформах:

my-great-lib-1.2.4.jar 

я могу использовать этот LIB (тот же файл) на любой версии Windows, или Linux.

В отличие от Java, Python библиотеки может выглядеть следующим образом:

bsdiff4-1.1.4.win-amd64-py2.5.exe 
bsdiff4-1.1.4.win-amd64-py2.6.exe 
bsdiff4-1.1.4.win-amd64-py2.7.exe 
bsdiff4-1.1.4.win-amd64-py3.2.exe 
bsdiff4-1.1.4.win-amd64-py3.3.exe 
bsdiff4-1.1.4.win32-py2.5.exe 
bsdiff4-1.1.4.win32-py2.6.exe 
bsdiff4-1.1.4.win32-py2.7.exe 
bsdiff4-1.1.4.win32-py3.2.exe 
bsdiff4-1.1.4.win32-py3.3.exe 

Посмотреть полный список на page.

Это выглядит очень странно для меня. Даже 32-битные и 64-битные платформы требуют разных инсталляторов. Монтажники! Зачем мне нужен установщик для использования одной библиотеки? Более того, указанные установщики предназначены только для Windows. Каждый из них связан с конкретной версией python. Где переносимость?

Может ли кто-нибудь объяснить необходимость в 10 разных файлах выше?

+0

Цифры после 'py' предназначены для разных версий python. Вы говорите, что существует только одна версия Java? – doctorlove

+0

Переносимость в коде C, из которого они скомпилированы, - если вы используете диспетчер пакетов, например 'pip', тогда вы можете скомпилировать его для своей собственной платформы. – Eric

+0

Если я скомпилирую мою единственную банку для java 6, она будет работать на java 6 , 7, 8. Еще одна банка. – tmporaries

ответ

0

Для одной версии python прыгать. В python 3 синтаксис некоторых встроенных изменений полностью изменился. Например:

raw_input() 

изменено на:

input() 

также, много стандартной библиотеки изменилась даже в альфа 3,4. Что касается вопроса 32/64 бит, я не могу полностью ответить. Я знаю, что на некоторых платформах возникают проблемы при попытке запустить 32/64, и это может быть и в этом.

1

Есть много осложнений. В Java, где ваш код, а затем байт-код интерпретируется JVM, присущая компьютерная архитектура не играет много роли, если ваш код хорошо интерпретируется JVM. На самом деле, это одна из основных причин, почему Java настолько популярна, потому что ваш код должен только беспокоиться о том, что JVM правильно скомпилирован.

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

  • язык сам по себе развивается (хотя она давно в сценарии, если вы думаете!) И изменения происходят внутри языка. Новые функции добавлены и когда-то, даже некоторая ремоделирование языка (Python 2.x to Python 3.x)
  • Python в значительной степени полагается на свои C-расширения, а также приложения, написанные на Python. Если вы пишите программу python и имеете некоторый процессорный код, вы можете записать его на C. Это также добавляет необходимость создания количества библиотек для различного распространения.
2

В общем, библиотеки Python переносятся на разных платформах. Проблемы возникают между различными основными версиями Python (3 вносили некоторые большие изменения с 2, но 2.7 обратно совместимы с 2.6) или когда вы используете C-код для оптимизации кода интенсивного процессора. В Linux компиляция сама по себе не является проблемой, когда вы вызываете пакет установки пакета, он сделает это за вас. Проблема в Windows, где сложнее скомпилировать программу на C, особенно потому, что не у всех есть компилятор. Итак, для Windows, пакетов, которые нуждаются в чем-то на C, вы обычно получаете установщик.

Кроме того, установщики используются, потому что они настраивают все хорошо, заглядывают в реестр для подходящего места для размещения всего, предлагают стандартный способ их удаления (те, которые можно удалить с сайта Chrisopther Goelke, с помощью программы «Установка и удаление программ» в панели управления), и поскольку это стандарт для Windows: большинство программ в Windows устанавливаются через exe, поскольку у него нет стандартного и широко распространенного менеджера пакетов.

Все эти библиотеки затем переносимы: вы можете использовать их с любой платформы, но их установка различается.

+0

Установка их - это то, что не переносится. – jeremyjjbrown

Смежные вопросы