Различия между Framework и не-Framework сборок Python в Mac OS X - PullRequest
49 голосов
/ 18 сентября 2009

Вопрос

В чем различия между сборкой Framework и сборкой не-Framework (т.е. стандартной сборкой UNIX) Python на Mac OS X? Кроме того, каковы преимущества и недостатки каждого из них?

Предварительные исследования

Вот информация, которую я нашел до публикации этого вопроса:

  • [Pythonmac-SIG] Почему необходима сборка фреймворка из Python
    • B. Грейнджер: «Кажется, я вспоминаю, что сборка Python для фреймворка необходима, если вы хотите что-то делать с родным графическим интерфейсом Mac. Правильно ли мое понимание?»
    • C. Баркер: «В значительной степени - для доступа к графическому интерфейсу Mac приложение должно быть в надлежащем комплекте приложений Mac. Это обеспечивает сборка платформы».
  • Подключение Apple для разработчиков: определение платформы
    • "Каркас - это пакет (структурированный каталог), который содержит динамическую совместно используемую библиотеку вместе со связанными ресурсами, такими как файлы пера, файлы изображений и файлы заголовков. Когда вы разрабатываете приложение, ваш проект ссылается на один или несколько фреймворки. Например, проекты приложений iPhone по умолчанию связаны с фреймворками Foundation, UIKit и Core Graphics. Ваш код получает доступ к возможностям фреймворка через интерфейс прикладного программирования (API), который публикуется фреймворком через его заголовочные файлы. Поскольку библиотека динамически используется совместно, несколько приложений могут одновременно обращаться к коду и ресурсам инфраструктуры. Система при необходимости загружает код и ресурсы платформы в память и разделяет одну копию ресурса среди всех приложений. "
  • Руководство по программированию на платформе Framework: что такое фреймворки?
    • "Frameworks предлагает следующие преимущества по сравнению со статически связанными библиотеками и другими типами динамических разделяемых библиотек:
      • Рамочные группы, связанные, но отдельные ресурсы вместе. Эта группировка упрощает установку, удаление и обнаружение этих ресурсов.
      • Фреймворки могут включать в себя более широкий спектр типов ресурсов, чем библиотеки. Например, инфраструктура может включать любые соответствующие заголовочные файлы и документацию. Несколько версий платформы могут быть включены в один пакет. Это делает возможным обратную совместимость со старыми программами.
      • В любой момент времени в памяти физически хранится только одна копия ресурсов, доступных только для чтения, независимо от того, сколько процессов используют эти ресурсы. Такое совместное использование ресурсов уменьшает объем используемой памяти и помогает повысить производительность. "

Фон

До Mac OS X 10.6 Snow Leopard я не задумывался об этом, так как я просто скачал и установил Образ установочного диска Python 2.6.2 Mac для Mac , который является сборкой фреймворка, и заниматься своими делами, используя virtualenv, pip и т. д. Однако с изменениями в Snow Leopard на 64-bit, gcc и т. д. я заметил некоторые проблемы, из-за которых я захотел собрать / скомпилировать Python 2.6.2+ я из источника, что приводит меня к моему вопросу о различиях и преимуществах / недостатках сборки Python как платформы MacOSX | Darwin.

Ответы [ 5 ]

13 голосов
/ 18 сентября 2009

Вы уже перечислили все важные преимущества создания каркаса (поздравляем с отличными исследованиями и сообщаем о них!); Единственная обратная сторона в том, что сложнее правильно построить ее, но если вы берете свои подсказки из примеров в установщике, который вы цитируете, это должно быть выполнимо.

Кстати, что не так с системой Python, поставляемой со Snow Leopard? Я еще не обновился с Leopard (длинная история ... У меня есть DVD-диск с обновлением «семейная лицензия», но мне нужно Snow Leopard, чтобы исправить некоторые вещи, прежде чем я смогу обновить), поэтому у меня пока нет опыта из первых рук с этим , но я знаю, что это сборка 2.6, и она поставляется как в 32-битной, так и в 64-битной версиях ... так зачем вам нужно создавать свой собственный фреймворк?

4 голосов
/ 10 ноября 2012

Есть еще одно отличие: обычно установка Framework, предоставляемая установщиком из python.org, имеет несколько архитектур.

$ file libpython2.7.dylib

libpython2.7.dylib: Mach-O universal binary with 2 architectures libpython2.7.dylib (for architecture i386): Mach-O dynamically linked shared library i386 libpython2.7.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

Если вы устанавливаете из исходного кода и не изменяете это намеренно, ваш libpython имеет только одну архитектуру. У меня были случаи, когда две архитектуры действительно приводили к проблемам (по крайней мере, я считаю, что это было причиной), а именно при установке привязок Python HDF5 (h5py).

И есть еще одно отличие: некоторые инструменты требуют установки фреймворка. Например, PyQt, и, в частности, SIP. Хотя можно установить sip и PyQt даже для неструктурированной версии python, все гораздо сложнее.

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

1 голос
/ 29 сентября 2009

Если вы собираетесь отправить свой код (запустить его на другой машине), вам лучше использовать системную версию python, иначе поведение вашей программы будет неопределенным на других машинах.

0 голосов
/ 29 сентября 2009

Сборки фреймворка принадлежат учетной записи root при установке. Исходная сборка будет принадлежать учетной записи, устанавливающей ее. Преимущество (и недостаток) владения установкой Python заключается в том, что вам не нужно менять учетные записи для ее изменения.

Небольшое отличие состоит в том, что сборки Framework строятся на основе библиотеки EditLine. Исходные сборки обычно компилируются с использованием библиотеки Readline. В зависимости от того, с какой библиотекой Python скомпилирован, модуль readline в стандартной библиотеке работает немного иначе. См. «Man python» в Mac OS X для более подробной информации.

Есть хорошая компоновка для автоматизации компиляции Python 2.4, 2.5 и 2.6 из исходного кода на Mac OS X, которая объяснена здесь Это скомпилируется против пользовательской сборки readline. Однако полезность сценариев при установке исходного кода заключается в том, что вы можете вносить дополнительные изменения в свои пользовательские сборки Python, например, установка необходимых дистрибутивов, таких как virtualenv, или более трудных для установки дистрибутивов, таких как PIL.

0 голосов
/ 29 сентября 2009

Я использую Macports на 10.6, что упрощает установку нескольких версий python и переключение между ними и версией Apple:

sudo port install python26
sudo port install python_select
sudo python_select -l

Самая последняя версия python26 - 2.6.2, она компилируется и нормально работает на 10.6.1: trac.macports.org/browser/trunk/dports/lang/python26/Portfile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...