2013-03-12 1 views
3

У меня есть три различных Python 2.7s по адресу:Для реальных, слишком много установок Python на OSX Mountain Lion

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 

я использую несколько пакетов, которые поступают из различных источников. В настоящее время я устанавливаю пакеты из порта (MacPorts), easy_install, pip (установлен easy_install) и Mercurial. Также есть некоторые, которые мне нужно установить из образа или построить из источника. Я больше контролирую их.

Проблема заключается в том, что easy_install и pip, похоже, устанавливаются в одном месте (/Library/Frameworks/...), а MacPorts устанавливается на другой (/opt/local/Library/Frameworks/...).

Какое у меня сейчас самое лучшее действие? Удалите /Library/Frameworks/.../python2.7 и переместите easy_install и pip на MacPorts один на /opt/local/...? Связать два каталога? Переместить установку MacPorts в /Library/Frameworks/...?

Как я могу консолидировать эти Pythons? Я попытался разместить оба сайта-места на своем пути, но только определенные пакеты доступны только для одного Python, а не для другого, и для других наоборот, и мне нужно, чтобы все они были доступны сразу.

+2

Что бы вы ни делали, * do * * not * пытаться переместить или удалить что-либо в '/ System/Library/Frameworks /'. Это файлы, поставляемые Apple, как часть OS X, включая систему Pythons. Они необходимы для правильной работы вашей системы. –

+2

Кроме того, вы не можете перемещать структуру Python из одного каталога в другой. Поэтому не пытайтесь переместить MacPorts Python из '/ opt/local /'. –

ответ

4

Похоже, что у вас есть контроль над материалом, который вы строите сами. Это, как я консолидировать MacPorts с пип:

Мне нравится использовать MacPorts для всех моих вещей, поэтому я просто убедитесь, что pip и easy_install встраивать в установку MacPorts' питона (тот, в /opt/local/...).

Вы можете сказать, где пип и easy_install будет установить вещи с помощью:

readlink `which pip` 

(те обратные кавычки)

Если вы хотите пип установить на MacPorts direcectories, использовать MacPorts установить пип:

sudo port install py-pip 

Затем, убедитесь, что which pip указывает на что-то вроде:

[email protected]:~$ which pip 
/opt/local/bin/pip 
[email protected]:~$ readlink `which pip` 
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip-2.7 

Из комментарии ниже (спасибо @ Джонатан и @Ned), вы можете сделать то же самое с easy_install, но его порт называется py-distribute:

sudo port install py-distribute 

Но, насколько я знаю, вы никогда не должны использовать easy_install т.к. anything that can be easy_installed can be piped better.

Примечание описания порта:

[email protected]:Tracking {master *}$ port search *easy*install* 
py-pip @1.2.1 (python, www) 
    An easy_install replacement 

[email protected]:Tracking {master *}$ port search py*distribute 
py-distribute @0.6.35 (python, devel) 
    Replacement for setuptools 
+1

Я просто никогда не использую 'pip' и не рекомендую против него из-за давней ошибки, когда' pip install' пытается загрузить и установить каждый пакет, даже если зависимость уже встречается. https://github.com/pypa/pip/issues/304 –

+0

@ Джонатан Полезно знать. В любом случае, вопрос запрашивает помощь в том, где должен быть установлен протокол, а не использовать пип. – askewchan

+1

Тот же подход применяется к 'easy_install'. Ключевым является понимание того, что каждый Python, который вы хотите использовать, нуждается в собственной копии 'easy_install' (из' Distribute' или 'setuptools') или' pip', а затем гарантирует, что вы используете эту копию. Стандартный способ сделать это - управлять переменной среды оболочки PATH. –

-2

Я стараюсь переместить все установки python в одно место и создать символические ссылки. После этого настройте среду python, чтобы избежать проблем с импортом и «видимости» модулей. Попробуйте использовать команды:

# easy_install 
env PYTHONPATH=/custom/path easy_install –install-dir /custom/path 

#pip 
pip install --install-option="--prefix=$PREFIX_PATH" package_name 
+0

Я думал об этом, но мне это кажется опасным (перемещение установок python). Сложно, так как некоторые вещи уже были установлены дважды (не говоря уже о двух разных строках python).Тем не менее, команды для указания мест установки из easy_install и pip кажутся полезными. – Dannid

1

Я предлагаю решение по одному и только один Python для работы в области развития (лично я использую распределение от Python.org)

  • Вы не можете избавиться от/Library/Frameworks - это OSX по умолчанию, и вы можете сломать вещи
  • двух оставшихся Pythons, я предполагаю, что один из них - Macports, а другой - Python.org - вам нужно выбрать, какой из них вы хотите быть вашим девело pment env и придерживаться этого.

Я сильно рекомендую использовать pip или easy_install из одного Python установить модули для другого. Причина в том, что могут быть различия в параметрах компиляции. Это может быть достаточно сложно, так как необходимо собрать определенные пакеты для OSX правильно - если вы начнете компиляцию с разных двоичных файлов (которые могут поддерживать разные архитектуры), вы просто собираетесь увеличить свои головные боли.

Я лично выбрал следующий путь:

  1. я использую пакет Python.org для развития всех.
  2. На терминале входа, я бегу сценарии оболочки приоритеты мой выбор Python
  3. Все мои проекты имеют свои собственные virtualenv и отключить системные пакеты
  4. Когда начинает работать над любым проектом, я, как правило, имеют сценарий настройки среды. Я просто набираю go_myproject.source; что cd s меня в нужную директорию и запускает source /path/to/virtualenv/bin/activate, чтобы настроить меня для этого проекта.

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

+0

Это, по-видимому, подчеркивает некоторые преимущества virtualenv. Я подумаю об этом, но, похоже, много работы для преобразования в это решение, если большинство вещей уже настроено. Одна вещь, которая привела меня в эту головную боль, в первую очередь заключается в том, что я унаследовал эту машину от предыдущего разработчика и должен был продолжать работать с небольшими знаниями о том, как все было установлено передо мной. (Кроме того, эта машина прошла через несколько обновлений OSX до моего приезда тоже.) – Dannid

+0

Наличие каждой библиотеки, которую необходимо установить на любой из трех установок Python, не имеет «большинство уже настроенных вещей». Все, что связано с C-расширением (simplejson, most sql apis, PIL, reportlab, чтобы назвать несколько), вероятно, вызовет много ошибок в будущем, если вы попытаетесь сконденсировать все в одну библиотеку. Подумайте об этом так: представьте, что это не пакеты Python, а некоторые приложения, такие как iTunes, Word, Photoshop. Если вы скопируете их с одного компьютера на другой, они * могут * работать, но чаще всего они будут разбиваться, если вы не запустили фактический установщик. Если ваши пакеты скомпилированы, такая же проблема. –

1

Хотя это не общее решение, я устанавливаю Mercurial и другие приложения на основе Python с помощью virtualenv. В частности, pip и easy_install будут устанавливаться только в соответствующую виртуальную среду, а не загромождать любую системную папку. Недостатком является, конечно, то, что у меня будут дубликаты некоторых пакетов; преимущество в том, что у меня есть чистая, автономная среда с известной версией Python (что для таких вещей, как Mercurial и другие критически важные приложения, для меня важнее).

Другой недостаток заключается в том, что мне нужно связать отдельные приложения с моим личным каталогом bin или добавить каталоги bin виртуальных сред на мой путь. (Лично я управляю этим с помощью некоторых простых скриптов, которые делают символические ссылки для меня.)

+0

Я не использовал virtualenv (еще?) И задаюсь вопросом, каковы его преимущества. Может ли он обрабатывать несколько пользователей на одном компьютере (чтобы мы могли получить доступ к установленным пакетам)? Хочу ли я еще одного менеджера установки поверх порта, easy_install, pip и mercurial? – Dannid

+0

Ну, 'virtualenv' не является менеджером установки. Это в основном песочница, содержащая копии/ссылки для существующей установки Python. В этой песочнице у вас есть интерпретатор и двоичные файлы Python для 'pip' и' easy_install', которые устанавливают пакеты и программы в этой изолированной программной среде. Обратите внимание, что «песочница» не означает, что это ограниченная версия Python, просто установка содержится в ее собственном каталоге. –

 Смежные вопросы

  • Нет связанных вопросов^_^