Слишком много разных версий Python в моей системе и проблемы
В течение последних лет я установил много библиотек Python с различными версиями Python. Чтобы они были готовы к работе сразу, я установил их слепо без контроля. В настоящее время они вызывают проблемы, когда я пытался установить pynest, который вызывает numpy, scipy и matplotlib. После битвы я собираюсь очистить и переустановить Python и библиотеки.
После исследования я нашел Python 2.5/2.6/2.7/3.2 в своей системе, и каждый из них имеет некоторые копии или другие вещи: (моя ОС == Mac OS X 10.7.5 Lion)
-
/Library/Frameworks/
-
/opt/local/Library/Frameworks/
-
/opt/local/bin/
-
/Applications/
-
/usr/local/bin/
-
/usr/bin/
-
/System/Library/Frameworks/
Я знаю, что я сумасшедший, чтобы иметь их. Теперь я удалил все это, кроме вещей в /System/Libarary/Frameworks
(я никогда не удаляю ничего из /System/Library/
). После чистой работы which python
теперь дает /usr/bin/python
, который ссылается на /System/Library/Frameworks
.
Теперь, это ясная среда для меня, чтобы переустановить python? Как проверить, нет ли других версий? Как мне переустановить их, чтобы гарантировать, что они и их библиотеки не будут повсюду и снова будут иметь много копий?
Я хочу установить чистый Python 2.7 в нужное место и сделать свою систему точно такой, где она есть, и никогда не устанавливать какие-либо библиотеки в другом месте. Пожалуйста, дайте мне несколько советов, как управлять им, как профессионально.
Для вашей информации, вот мой текущий $PATH
, я думаю, что он должен быть изменен:
/opt/local/bin:/opt/local/sbin:/opt/nest/lib/python2.7/site-packages:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/django/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin
Пожалуйста, дайте мне знать Если вам нужна дополнительная информация. Спасибо!
UPDATE
Я глубоко переосмысливаю, почему он становится таким сумасшедшим. Я верю, потому что я установил вещи через:
-
easy_install
/macports
/homebrew
/fink
/pip
иногда;
-
.dmg
иногда;
-
.pkg
иногда;
- иногда компилировать исходный код;
и они делали вещи в разных местах. Интересно, каков механизм этих способов? Как они выбирают целевое местоположение? Как помешать им запутаться?
Ответы
Ответ 1
Почему это запуталось?
Есть пара разных способов установить Python, как говорит обновление OP, и они размещают файлы в разных местах. Например, macports
помещает вещи в /opt/local/
, а homebrew
помещает вещи в /usr/local/
. Кроме того, Mac OS X предлагает несколько версий python с собой. Таким образом, если вы будете устанавливать python много раз разными способами, вы получите много версий python, существующих независимо в вашей системе.
В чем проблема?
Я точно не знаю. Я думаю, проблема в том, что если у вас много версий python, то какой из них использовать и где найти пакеты будет определяться порядком пути в вашей системе PATH
и PYTHONPATH
соответственно. Таким образом, вы можете потерять контроль над установкой модулей python. Учтите, что если вы запустите sudo python setup.py install
для установки модуля (он найдет python от root PATH
), а затем попробуйте import
модуль python -c "import it"
(на этот раз он найдет python с помощью PATH
), возможно что-то пойдет не так. Это моя догадка, я не подтвердил это. Но в моем собственном случае что-то пошло не так.
Как этого избежать?
Я думаю, что принцип будет заключаться в том, что должен знать, что разные способы и инструменты устанавливают вещи независимо друг от друга в разные местоположения, поэтому используйте их мысленно.
- Если вы не намерены, не устанавливайте одну и ту же вещь дважды через разные
пути. (Если вы намереваетесь сделать это для python, вы можете проверить
virtualenv
)
- Следите за порядком пути в своем
PATH
и подумайте,
верный.
- При установке модулей, убедитесь, что python (или pip)
и где установлен модуль.
Итак, как я решил свой собственный случай?
Поскольку он уже запутывался и, казалось, очень трудно вылечить, поэтому, наконец, я решил этот вопрос полной переустановкой ОС и начал следить за DOS-DONT выше. Для установки научной среды с помощью python (numpy/scipy/matplotlib, который показал проблемы, чтобы заставить меня задавать этот вопрос), я нашел этот учебник был чрезвычайно полезен. Итак, проблема решена окончательно.
Ответ 2
Чтобы установить дистрибутивы python в определенную папку, вы можете использовать схему --prefix
во время установки python. Используя схему префикса , вы можете, например, установить Python 2.7 в папку /opt/py27
. Теперь, чтобы использовать новый установленный дистрибутив Python, вы должны: очистить PATH и LD_LIBRARY_PATH:
- Удалите все "старые" пути Python и
- сконфигурируйте (согласно моему примеру) переменные среды следующим образом:
- PATH: Добавить /opt/py 27/bin
- LD_LIBRARY_PATH: Добавить /opt/py 27/lib
Что это.
(Если вам нужны несколько сред Python, установленных одновременно, я бы предложил посмотреть virtualenv)
Ответ 3
Вот что меня смутило и как я это решил.
$ which python
/usr/bin/python
$ which python3
/usr/local/bin/python3
$ ls /usr/local/bin/python
ls: /usr/local/bin/python: No such file or directory
Так что заметьте, у меня не было установки HomeBrew для python2.7, но у меня была установка python3. Версия под /usr/bin/python используется по умолчанию для системы. Вы можете указать на основе пути поиска модуля:
$ /usr/bin/python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
`enter code here`Type "help", "copyright", "credits" or "license" for
more information.
>>> import sys
>>> sys.path
['', '/Library/Python/2.7/...
Обратите внимание на "/Library/Python"... версию Mac OS для python. Но я хочу строго придерживаться установленной пользователем версии (например, HomeBrew).
Итак, вот что я сделал, чтобы исправить это:
$ brew install python
...
Warning: python 2.7.13 is already installed, it just not linked.
You can use `brew link python` to link this version.
$ brew link --overwrite python
$ which python
/usr/local/bin/python
$ python
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/Cellar/python/2.7.13...
Его больше нет /Library/.. но/usr/local.
Теперь он находит все мои установленные модули! Проблема решена!
Ответ 4
Вот еще одно отличное решение для управления различными версиями python:
https://github.com/pyenv/pyenv
(Я уже дал ответ здесь, но решил опубликовать это как дополнительный или альтернативный ответ)