Подтвердить что ты не робот

Слишком много разных версий 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 иногда;
  • иногда компилировать исходный код;

и они делали вещи в разных местах. Интересно, каков механизм этих способов? Как они выбирают целевое местоположение? Как помешать им запутаться?

4b9b3361

Ответ 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

(Я уже дал ответ здесь, но решил опубликовать это как дополнительный или альтернативный ответ)