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

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

  • Python 2.6.1 (версия по умолчанию для Mac?) in /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 via pip и только будучи в состоянии загрузить его из устаревшего 2.6.1 Python, а не мой текущий 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 систематически, так в чем же связь с хорошим практическим введением?

3 ответов


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

"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ - СРСЛИ?"

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

для Mac OS X 10.6, Apple поставляет Python 2.6 (корни в /System/Library/Frameworks/Python.framework и symlinked к /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 каталог (at ../Versions/x.x/bin в рамках); обычно это место по умолчанию, где будут установлены сценарии пакетов. Там же ссылки на бинарники переводчик помещаются.

вот посмотрите на питона.структура org-style с установлено несколько версий 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 Pythons, используя python.org установщики или MacPorts, все они коренятся под /Library/Frameworks или /opt/local/Library/Frameworks и будут счастливо сосуществовать с другими версиями. Чтобы успешно использовать установки framework, необходимо управлять оболочкой PATH. В частности, вы должны убедиться, что рамки питона(ы) вы хотите использовать на своем 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 или С Distribute или setuptools) для каждого экземпляра Python, который вы используете. Каждый из них установлен в директорию по умолчанию (т. е. в рамках ). 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 вы can использовать python_select команда для управления экземпляром Python, на который указывает /opt/local/bin/python. Тогда если /opt/local/bin появляется раньше в списке, чем другие каталоги с python он будет управлять, который является по умолчанию python. Но вам действительно нужно управлять путем, добавив framework так 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's Distutils чтобы выполнить грязную работу, все эти методы обычно заканчиваются установкой файлов пакета в одном месте для данного экземпляра Python.


Я просто использовал "pythonbrew", который я easy_installed с системой Python на 10.6.7. Мне пришлось использовать опцию "--force", чтобы обойти тесты после компиляции, хотя, поскольку у меня были сбои с test_dl и test_readline (быстрая проверка google не показала, что это реальная проблема).

$ sudo easy_install pythonbrew

после установки, запустить дополнительные указания:

$ pythonbrew_install

Итак, теперь у меня есть хорошо изолированная установка python-2.7.1 без вмешательства в систему установка.


Я бы рекомендовал использовать Homebrew, как и люди Python Guide:

вот фантастический шаг за шагом руководство по началу работы:

http://docs.python-guide.org/en/latest/starting/install/osx/#install-osx