Предлагаемый способ обработки pip (easy_install) с помощью homebrew?

2878
Drake Guan

Я знаю, что есть варево и варочные косточки, но запутаться все равно очень легко. Допустим, у меня Mac OS X 10.7.2.

  • Насколько я знаю, есть как минимум 3 места для модулей Python (предположим, 2.7):
    1. /System/Library/Frameworks/Python.framework/Versions/2.7/
    2. /Library/Python/2.7/site-packages
    3. /usr/local/lib/python2.7/site-packages/ (контролируется в рамках homebrew)
  • Для некоторых модулей Python установите pip в 2, так называемое локальное / настраиваемое расположение модуля Python, и все выглядит и работает отлично. Например, readline от easy_install ( ipython предложил мне установить readline с помощью easy_install вместо pip )
  • Для некоторых он попытается установить несколько разных файлов (ex, man, doc, ...) в общесистемное расположение, что требует sudo ! Например, ipython настаивал на установке man и doc в /System/Library/Frameworks/Python.framework/Versions/2.7/share/, что нарушает проблему с разрешениями, и все, что я могу сделать, - это использовать sudo .
  • Для некоторых модулей Python, установленных brew, они символически связаны с /usr/local/lib/python2.7/site-packages/ . Все кажется великолепным, за исключением того, что вы должны помнить, чтобы добавить это место в PYTHONPATH .

Мне интересно, какой бы ни был предложенный и унифицированный способ справиться с этой массой, или какое-либо объяснение, чтобы сделать эти вещи кристально ясными.

5
У меня нет кристально чистого решения, за исключением, возможно, нескольких возможных способов установки. dsummersl 12 лет назад 0

2 ответа на вопрос

3
m000

Maybe it is time to consider using virtualenv. Virtualenv creates self-contained python environments using the python version you specify. After activating the new virtual environment, everything you install using pip goes under that environment. This helps avoid situations like the one you described.

E.g. create and activate a new python environment using the default python:

# create environment $ virtualenv --distribute myproject New python executable in myproject/bin/python Installing distribute...done. Installing pip...done. # activate environment $ . ./myproject/bin/activate # check default python (myproject)$ which python /Users/me/myproject/bin/python 

It is suggested to use the --distribute options to indicate that distribute should be used for installing packages in the new environment instead of (the older) setuptools. After activation your command prompt changes to indicate which python environment is active.

Now install some package. The files will go into myproject directory:

# install django (myproject)$ pip install django ... # search for django dir (myproject)$ find myproject -iname django myproject/lib/python2.7/site-packages/django 

Finally, deactivate:

# deactivate and check for default python (myproject)$ deactivate $ which python /usr/bin/python 

To create an environment using a non-default version of python:

$ virtualenv --distribute -p /path/to/custom/python mynewproject 

By default virtualenv will copy to the new environment any packages installed for the python version you use to bootstrap it. To prevent this and create an empty environment use the --no-site-packages option. This is especially useful to create environments which can be exactly replicated e.g. from development to production.

Update: As of version 1.7 --no-site-packages has become the default behaviour of virtualenv.

If you want more details, there are plenty of tutorials and blog posts online. E.g.:

  1. Notes on using pip and virtualenv with Django. (most of the post is not django-specific)
  2. Working with virtualenv.

Give it a try and I'm sure you'll stick with it.

Note: Make sure that your executable scripts do not have the python interpreter hardcoded. I.e. their first line should be #!/usr/bin/env python and not something like #!/usr/bin/python.

Вы будете придерживаться этого до тех пор, пока `pip install scipy` или` PySide` или `PyQt4` не будут работать, а затем мы вернемся к выяснению, как лучше перемещать установленные на brew модули на Mac OSX Lion. hobs 12 лет назад 0
Что вы имеете в виду "двигаться"? Идея заключается в том, что вы устанавливаете свои модули в своем virtualenv и не используете общесистемные места установки. m000 12 лет назад 0
К вашему сведению, только что попробовал, и scipy устанавливает как очарование в virtualenv. Была пара незначительных проблем (numpy не указан как dep, я не установил компилятор fortran), но ничего удивительного или трудного для преодоления. Могу поспорить, что у двух других модулей также не будет проблем, если вы установили необходимые нативные библиотеки и заголовки с brew. Если у вас есть какая-то конкретная проблема с вашей установкой, задайте новый вопрос с деталями, а не просто звоните в BS по поводу решения, которое сработало для этого вопроса и должно работать в подавляющем большинстве случаев. m000 12 лет назад 0
Я люблю virtualenv и virtualenvwrapper и использую их на Mac OS X. Но единственный способ получить ipython с установленными pyqt, scipy и т. Д. - это brew. Под «перемещением» я подразумеваю ссылку на соответствующие глобальные пакеты сайтов из пакетов сайтов venv. Это то, что мне в итоге пришлось сделать, чтобы ipython + pyqt + matplotlib + scipy работали в рамках virtualenv на моем Lion Mac hobs 12 лет назад 0
0
Randall Hunt

Мои предложения:

  1. Установите пакет инструментов командной строки xcode через Xcode -> Настройки -> Загрузки-> Компоненты : xcode

  2. Установить доморощенного (обновить свой путь в .profile, .SHELLrcили независимо от того, чтобы включить /usr/local/bin перед тем в системе по умолчанию, как /usr/bin).

  3. Для Python сначала установите все предварительные требования самостоятельно:

    • brew install readline sqlite gdbm pkg-config
    • brew install python --framework --universal
    • обновите ваш путь, чтобы он использовал правильные distutils: export PATH=/usr/local/share/python:$PATH
  4. easy_install pip

  5. pip install virtualenv
  6. pip install virtualenvwrapper
  7. Включают export PYTHONPATH=/usr/local/lib/python:$PYTHONPATH
Вот Это Да! Вы удаляете встроенный Python материал и делаете символ для доморощенного? Действительно рискованно. Drake Guan 12 лет назад 0
В любом случае встроенный Python ужасен - от него ничего не зависит. Randall Hunt 12 лет назад 0
Интересный подход - обратите внимание, что на шаге 4 easy_install представляет собой одну команду, а не два слова. RichVel 6 лет назад 0

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