Получение контроля над Python в Mac OS X - настройка среды и библиотек

После того, как я начал работать с Python в Ubuntu Linux, я довольно долго выполнял большую часть своей постоянной работы на Mac, в настоящее время Mac OS X 10.6. К сожалению, я не уделил должного внимания тому, как Python установлен там, и в итоге получил:

  • Python 2.6. 1 (версия по умолчанию для Mac?) В / usr / bin (также 2.5.4, в которой я не уверен, как он туда попал)
  • Python 2.6.5 установлен через MacPorts в / opt / local / bin / . Это мой стандарт
  • . Я использую pip для установки библиотек, которые оказываются в каком-то нечестивом месте (что-то вроде /opt/local/Library/Frameworks/Python.framework/Versions/2.6/ lib / python2.6 / site-packages / - SRSLY?)
  • В остальном, в основном, TextMate и Git для контроля версий. Django, Google App Engine и т. Д.

Сейчас я готовлюсь к настройке 2.7 и 3.2, и меня не устраивает случайное положение вещей. Итак, какие ваши любимые подходы к организации кода и библиотек, и как вы боролись с Mac в представлении?

Я хотел бы продолжить использовать pip , но хотел бы иметь больше контроля или хотя бы понять, какие библиотеки для какой версии устанавливаются и становятся доступными откуда: у меня были проблемы с установкой py.test через pip и только возможность загрузить его с устаревшего Python 2.6.1, а не моего текущего 2.6.5. У MacPorts есть python_select , но это не слишком полезно:

reason: chris$ python_select -l
Available versions:
current none python26 python26-apple

Большинство пользователей Python, которых я просил, не используют MacPorts, что мне не очень нравится, но стандартный Mac Python из python .org . Я также слышал рекомендацию использовать virtualenv систематически, так какова связь с хорошим практическим введением?

21
задан Peter Mortensen 22 July 2011 в 00:27
поделиться

1 ответ

virutalenv - отличный инструмент, очень полезный для управления несколькими экземплярами Python на большинстве платформ. В Mac OS X, однако, все обстоит сложнее, потому что использование сборок фреймворка часто позволяет встретить несколько экземпляров даже одной и той же основной версии Python. Я предлагаю вам сначала понять и освоить, как управлять установками фреймворка в Mac OS X, прежде чем углубляться в virtualenv .

« /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ - SRSLY?»

Да, это расположение по умолчанию в рамках сборки Python Mac OS X. Большинство распространителей Python в Mac OS X используют сборку фреймворка , каждая из которых обычно использует другой корень, потому что это упрощает поддержку нескольких версий и сохранение всех пакетов сайта, установленных для конкретного экземпляра Python, вместе в одно место.

Для Mac OS X 10.6 Apple предоставляет Python 2.6 (корневой каталог /System/Library/Frameworks/Python.framework и символическая ссылка на /usr/bin/python2.6 ), а также Python 2.5 (для совместимости с Mac OS X 10.5 - это /usr/bin/python2.5 , который вы видите). Установщики python.org для Mac OS X устанавливаются в /Library/Frameworks/Python.framework . MacPorts использует /opt/local/Library/Frameworks/Python.framework .

Платформы включают каталог bin (в структуре ../ Versions / x.x / bin ); Обычно это место по умолчанию, в которое устанавливаются сценарии пакета.Здесь также размещаются символические ссылки на двоичные файлы интерпретатора.

Вот фреймворк в стиле python.org с несколькими установленными версиями Python:

$ cd /Library/Frameworks/Python.framework/Versions/
$ ls -l
total 8
drwxrwxr-x  8 root  admin  340 Dec 23  2008 2.5/
drwxrwxr-x  8 root  admin  340 Aug 10 21:42 2.6/
drwxrwxr-x  8 root  admin  340 Jul  3 12:24 2.7/
drwxrwxr-x  7 root  admin  306 Mar 23 17:42 3.1/
drwxrwxr-x  7 root  admin  306 Aug 10 22:14 3.2/
lrwxr-xr-x  1 root  admin    3 Aug 10 21:47 Current@ -> 2.6
$ cd 2.6
$ ls -l
total 7776
lrwxr-xr-x  1 root  admin       17 Aug 10 21:47 Headers@ -> include/python2.6
drwxrwxr-x  3 root  admin      102 Aug 10 21:42 Mac/
-r-xrwxr-x  1 root  admin  3973552 Aug 10 21:41 Python*
drwxrwxr-x  4 root  admin      170 Aug 10 21:48 Resources/
drwxrwxr-x  2 root  admin      578 Aug 12 15:19 bin/
drwxrwxr-x  3 root  admin      102 Aug 10 21:42 include/
drwxrwxr-x  3 root  admin      646 Aug 10 21:43 lib/
drwxrwxr-x  3 root  admin      102 Aug 10 21:41 share/
$ ls -l bin
total 264
-rwxrwxr-x  1 root  admin    150 Aug 10 21:41 2to3*
-rwxr-xr-x  1 nad   admin    360 Aug 12 15:19 easy_install*
-rwxr-xr-x  1 nad   admin    368 Aug 12 15:19 easy_install-2.6*
lrwxr-xr-x  1 root  admin      7 Aug 10 21:47 idle@ -> idle2.6
-rwxrwxr-x  1 root  admin    138 Aug 10 21:41 idle2.6*
lrwxr-xr-x  1 root  admin      8 Aug 10 21:47 pydoc@ -> pydoc2.6
-rwxrwxr-x  1 root  admin    123 Aug 10 21:41 pydoc2.6*
lrwxr-xr-x  1 root  admin      9 Aug 10 21:47 python@ -> python2.6
lrwxr-xr-x  1 root  admin     16 Aug 10 21:47 python-config@ -> python2.6-config
-rwxrwxr-x  1 root  admin  29584 Aug 10 21:43 python2.6*
-rwxrwxr-x  1 root  admin   1463 Aug 10 21:42 python2.6-config*
lrwxr-xr-x  1 root  admin     10 Aug 10 21:47 pythonw@ -> pythonw2.6
-rwxrwxr-x  1 root  admin  29584 Aug 10 21:43 pythonw2.6*
lrwxr-xr-x  1 root  admin     11 Aug 10 21:47 smtpd.py@ -> smtpd2.6.py
-rwxrwxr-x  1 root  admin  18272 Aug 10 21:41 smtpd2.6.py*

Вот MacPorts bin , включая ряд дополнительных пакетов сайта:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6
$ ls -l bin
total 952
-rwxr-xr-x  2 root  wheel    160 Jul 15 01:56 2to3*
-rwxr-xr-x  2 root  wheel   1541 Jun  8 19:59 apirst2html.py*
-rwxr-xr-x  2 root  wheel    363 Oct  5  2009 bdist_mpkg*
[...]
-rwxr-xr-x  2 root  wheel    211 Jun  2 12:45 django-admin.py*
-rwxr-xr-x  2 root  wheel    410 Jul 15 17:30 easy_install*
-rwxr-xr-x  2 root  wheel    418 Jul 15 17:30 easy_install-2.6*
[...]
-rwxr-xr-x  2 root  wheel    368 Jun 24 02:00 pip*
-rwxr-xr-x  1 root  wheel    342 Sep 18  2009 pkginfo*
[...]
lrwxr-xr-x  1 root  wheel      9 Jul 15 01:58 python@ -> python2.6
lrwxr-xr-x  1 root  wheel     16 Jul 15 01:58 python-config@ -> python2.6-config
-rwxr-xr-x  2 root  wheel  24932 Jul 15 01:57 python2.6*
-rwxr-xr-x  2 root  wheel   1473 Jul 15 01:57 python2.6-config*
[...]

Если вы установите 2.7 или 3.1 Питоны, использующие установщики python.org или MacPorts, все они имеют root-права в / Library / Frameworks или / opt / local / Library / Frameworks и будут успешно сосуществовать с другими версиями. Чтобы успешно использовать установку фреймворка, вам необходимо управлять вашей оболочкой PATH . В частности, вы должны убедиться, что каталог framework bin Python (ов), который вы хотите использовать, находится в вашем PATH . Итак, для MacPorts, что-то вроде этого в ~ / .bash_profile :

export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:$PATH

или для установщиков python.org:

export PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:$PATH

Кроме того, обычно вам нужно установить отдельную версию вашего любимого управления пакетами Python надстройки (например, pip или команда easy_install из Distribute или setuptools ) для каждого используемого вами экземпляра Python. Каждый из них устанавливается в каталог сценариев по умолчанию (т.е. каталог framework bin ). MacPorts позаботится об этом автоматически, когда вы установите его версию пакета ( sudo port install py26-pip или sudo port install py31-distribute ).Обратите внимание, что Apple предоставляет набор ссылок easy_install в / usr / bin для своих Pythons, и они устанавливают пакеты в / Library / Python . Убедитесь, что вы используете easy_install или pip , подходящий для вашего экземпляра Python. Убедитесь, что каталог framework bin экземпляра находится первым в PATH .

Обратите внимание: если вы используете MacPorts, вы можете использовать команду python_select для управления тем, на какой экземпляр Python указывает / opt / local / bin / python . Затем, если / opt / local / bin появляется раньше в вашем списке PATH, чем другие каталоги с python , он будет определять, какой из них является вашим python по умолчанию. Но вам действительно нужно управлять PATH, добавляя каталог framework bin , поэтому python_select обычно не так уж и полезен.

Еще одним положительным аспектом использования MacPorts (или аналогичного распространителя с широкой базой данных) является то, что он делает доступными многие популярные пакеты Python , включая , обрабатывающие случайные беспорядочные детали сборки и связывания со сторонними библиотеками C, которые не поставляются. с Mac OS X. Например, пакеты MySQLdb и PIL часто встречаются в Mac OS X из-за клиентских библиотек MySQL и libjpeg , но MacPorts позволяет сделать все правильно.Но у вас есть выбор: установить все напрямую с помощью MacPorts ( sudo port py26-pil ) или через pip ( sudo pip install pil ) или easy_install , или вы можете загрузить исходный код и сделать это самостоятельно ( sudo python setup.py ... ). И поскольку все они под прикрытием используют Python Distutils для выполнения грязной работы,все эти методы обычно приводят к установке файлов пакета в одно и то же место для данного экземпляра Python.

17
ответ дан 29 November 2019 в 21:57
поделиться
Другие вопросы по тегам:

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