Вопрос по macos, python, frameworks – Различия между Framework и не-Framework сборок Python в Mac OS X

48
Вопрос

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

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

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

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

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

Для читателей, использующих Homebrew, вы можете установить сборку фреймворка с помощью.brew install python --framework Danyal Aytekin

Ваш Ответ

5   ответов
0

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

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.

13

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

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

Системный Python, поставляемый со Snow Leopard, - это Python 2.6.1. Я'Я предпочитаю запускать 2.6.2, чтобы иметь различные исправления. Matthew Rankin
1

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

На самом деле этоне правильно. Если вы хотите отправить свой код в виде пакетов приложений (через py2app), вы должны использовать версию фреймворка из Python.org, так что вы не 'привязан к определенной версии OS X. Все сборки Python.org совместимы с>= 10,4. dwf
0

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

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

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

4

обычно установка 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, все гораздо сложнее.

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

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