Ответ 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?"
Да, это место по умолчанию в структуре фреймворка X-X под управлением Python. Большинство дистрибуторов 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 X 10.5), что /usr/bin/python2.5
вы видите). Установленные установщиком python.org Mac 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 [email protected] -> 2.6
$ cd 2.6
$ ls -l
total 7776
lrwxr-xr-x 1 root admin 17 Aug 10 21:47 [email protected] -> 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 [email protected] -> 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 [email protected] -> 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 [email protected] -> python2.6
lrwxr-xr-x 1 root admin 16 Aug 10 21:47 [email protected] -> 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 [email protected] -> 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 [email protected] -> 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 [email protected] -> python2.6
lrwxr-xr-x 1 root wheel 16 Jul 15 01:58 [email protected] -> 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
и будут счастливо сосуществовать с другими версиями. Чтобы успешно использовать фреймворки, вам необходимо управлять оболочкой PATH
. В частности, вы должны убедиться, что каталог bin
каталога Python (s), который вы хотите использовать, находится на вашем 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. Каждый из них устанавливается в каталог по умолчанию script (т.е. Каталог bin
). MacPorts автоматически об этом заботится, когда вы устанавливаете свою версию пакета (sudo port install py26-pip
или sudo port install py31-distribute
). Обратите внимание, что Apple поставляет набор easy_install
ссылок в /usr/bin
для своих Python и устанавливает пакеты на /Library/Python
. Вам нужно убедиться, что вы используете easy_install
или pip
, подходящие для вашего экземпляра Python. Убедившись, что каталог framework bin
является первым в PATH
, гарантирует, что.
Примечание. Если вы используете MacPorts, вы можете использовать команду python_select
для управления, на какой экземпляр Python указан /opt/local/bin/python
. Затем, если /opt/local/bin
появляется раньше в вашем списке PATH, чем в других каталогах с python
, он будет определять, который является вашим значением по умолчанию python
. Но вам действительно нужно управлять PATH, добавив каталог bin
, поэтому python_select
, как правило, не все, что полезно.
Другим положительным аспектом использования MacPorts (или подобного широко распространенного дистрибьютора) является то, что он предоставляет множество популярных пакетов Python, включая обработку случайных беспорядочных деталей построения и связывания с сторонними библиотеками C, не поставляемыми с Mac OS X X X, Например, пакеты MySQLdb
и PIL
являются частыми камнями преткновения в Mac OS X X из-за клиентских библиотек MySQL и libjpeg
, но MacPorts упрощает все. Но у вас есть выбор, чтобы установить вещи напрямую с помощью MacPorts (sudo port py26-pil
) или через pip
(sudo pip install pil
) или easy_install
, или вы можете загрузить исходный код и сделать это самостоятельно (sudo python setup.py ...
). И поскольку все они под обложками используют Python Distutils
для выполнения грязной работы, все эти методы, как правило, завершают установку файлов пакетов в одном месте для данного экземпляра Python.