Утилита Messy Python? (OS X)

Я являюсь полным новичком для Python и OS X Terminal, и я попытался установить некоторые пакеты как для Python 2.7.3, так и для Python 3.4.

Я не могу получить механизацию для работы ни с Python 2, ни с Python 3 после установки. Я получил:

>>> from mechanize import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/XXX/Desktop/mechanize-0.2.5/mechanize/__init__.py", line 119, in <module> from _version import __version__ ImportError: No module named '_version' 

В попытке понять, почему он ищет расположение модуля на моем рабочем столе (где я загрузил исходный код и запустил setup.py ), мне интересно, запущены ли мои установки Python.

Я нашел Python в этих трех разных местах, о которых я знаю:

Macintosh HD / Library / Frameworks / Python.framework / 3.4 / – [ Здесь хранятся Python 3 и его сайты-пакеты ]

Macintosh HD / Система / Библиотека / Рамки / Python.framework / Версии / 2.7 / – [ Я не могу найти какие-либо сайты-пакеты здесь ]

Macintosh HD / Library / Python / 2.7 / – [ Только пакеты сайтов в этой папке, ничего больше ]

Является ли последнее неуместным?

Возможно, я должен упомянуть, что я использую пользователя non-admin / non-sudo в терминале по умолчанию. Поэтому, когда я устанавливаю пакеты, я делаю:

 su -l admin sudo easy_install xxx or sudo python3 setup.py install 

В идеале, я хотел бы очистить мою установку Python, удалить установленные мной пакеты и поместить все виртуально с помощью virtualenv .

OS X поставляется с предустановленной Python. Точно, какая версия (-ы) зависит от вашей версии OS X (например, 10.10 поставляется с 2.6 и 2.7, 10.8 поставляется с 2.5-2.7 плюс частичная установка 2.3, а 10.3 – с 2.3).

Они установлены в /System/Library/Frameworks/Python.framework/Versions/2.* , а их пакеты сайтов находятся внутри /Library/Python/2.* . (Причина, по которой они находятся в разных местах, заключается в том, что /System/Library должна быть записана только установками / обновлениями ОС.)

Вы не можете удалить предустановленные версии Python без потенциального взлома ОС (и, даже если бы вы могли, они просто переустановились при следующем обновлении ОС).

Но если вы планируете использовать Python 3.4, вы можете просто проигнорировать версии 2.x, которые Apple предоставила вам. Все версии, по крайней мере, Python 3.2+, которые поступают из python.org или других основных источников, таких как Homebrew, будут следовать PEP 394 , что означает, что вы получите команды python3 , pip3 и т. python3 , pip3 не сталкиваются с командами python и т. Д. от Apple.

Кроме того, вы упомянули об использовании виртуальных сред в своем вопросе. Это хорошая идея. Независимо от того, используете ли вы stvlib venv или сторонний virtualenv , вы можете создавать отдельные среды Python 3.4. Когда вы находитесь в активной виртуальной среде, ее pip будет устанавливать в свои пакеты-сайты вместо глобального. И если вы действительно испортили среду, вы можете легко ее очистить, просто отключив и выполнив rm -rf path/to/environment и воссоздав ее.

В качестве побочного примечания вы почти никогда не хотите использовать easy_install . Если вы устанавливаете Python 3.4, он поставляется с pip , поэтому для установки пакетов для него это:

 [sudo] pip3 install xxx 

Даже если у вас есть setup.py , если он не совместим с pip (большинство из них в настоящее время, но некоторые из них нет), вы, вероятно, захотите использовать его вместо запуска setup.py вручную, например:

 [sudo] pip3 install . 

Кроме того, установщики python.org имеют возможность сделать каталоги сайтов-пакетов доступными для групп. Если вы включили это, вы не должны использовать sudo , потому что тогда у вас появятся пакеты сайтов, представляющие собой набор записываемых и незаписываемых, а удаление или обновление станет кошмаром. (Одно из достоинств использования этой опции заключается в том, что никогда не использовать sudo означает, что вы никогда не сможете случайно установить что-либо для Apple Python 2.7, потому что если вы попытаетесь получить ошибку разрешений, но недостатки очевидны. Вот почему это вариант.)


Итак, как вы доберетесь отсюда?

  • Чтобы получить список всех установленных вами пакетов, вы можете захотеть выполнить pip list > requirements к pip list > requirements или pip freeze > requirements . (Первый из них более читабельен для человека, последний может использоваться напрямую с pip install -r requirements чтобы автоматически переустанавливать один и тот же набор пакетов после очистки.) Возможно, вы захотите сделать это с помощью как 2.7, так и 3.4, если вы 've pip установленный для обоих, и получил довольно запутанную ситуацию.
  • Удалите свой Python 3.4.
  • Удалите все пакеты сайтов, которые вы установили для Apple Python 2.7. (Вы уже знаете, где это, поэтому, даже если вы не установили их с помощью pip , вы можете удалить их вручную. Просто имейте в ipython что они, возможно, оставили скрипты, такие как ipython или аналогичные в /usr/local/bin .)
  • Установите последнюю версию Python 3.4 на python.org.
  • [sudo] pip3 install все пакеты, которые вы хотите глобально. (Это может быть ничего, или просто virtualenv .)
  • Используйте venv или virtualenv для создания виртуальной среды для каждого проекта, который вы хотите сохранить отдельно, и используйте свой pip а не глобальный, для установки пакетов для этой конкретной среды.

Не удаляйте python, который поставляется вместе с вашим os x, поскольку некоторые вещи зависят от этой установки.

После очистки вашей установки python 3 вы должны работать с виртуальными средами, потому что они сэкономит вам много боли. Затем вы можете указать, какую версию python следует использовать (вы можете установить каждую желаемую версию), и каждый установленный вами пакет просто установлен для этой конкретной среды, а глобальный питон вашей системы остается нетронутым.

Чтобы начать настройку виртуальных сред, я рекомендую читать в pyenv и pyenv-virtualenv

https://github.com/yyuu/pyenv https://github.com/yyuu/pyenv-virtualenv

просто попробуйте в командной строке python3 и используйте его со своими скриптами. И бегите вот так.

python3 myscript.py

Вы можете очистить свой существующий материал Python и попробовать Conda .