Au cours des dernières années, j'ai installé de nombreuses Python avec diverses versions Python. Pour les rendre immédiatement opérationnelles, je les ai installées à l'aveuglette, sans contrôle. Actuellement ils causent des problèmes lorsque j'ai essayé d'installer pynest qui appelle numpy, scipy et matplotlib. Après avoir lutté, je vais nettoyer et réinstaller Python et les bibliothèques.
Après enquête, j’ai trouvé Python 2.5/2.6/2.7/3.2 sur mon système, et chacun d’entre eux contient des copies ou d’autres choses à: (mon système d’exploitation == 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/
Je sais que je suis fou d'avoir ces derniers. Maintenant, j'ai enlevé toutes ces choses sauf les choses dans /System/Libarary/Frameworks
(Je ne retire jamais rien de /System/Library/
). Après le nettoyage, which python
Donne maintenant /usr/bin/python
Qui renvoie à /System/Library/Frameworks
.
Maintenant, est-ce un environnement clair pour moi de réinstaller python? Comment vérifier qu'il n'y a pas d'autres versions existantes? Comment dois-je les réinstaller pour m'assurer qu'ils et leurs bibliothèques ne seront pas partout et qu'ils auront à nouveau de nombreuses copies?
Je souhaite installer un propre Python 2.7 sur un emplacement approprié et faire en sorte que mon système sache exactement où il se trouve et n’installez jamais de bibliothèque ailleurs. Merci de me donner quelques conseils pour le gérer comme de manière professionnelle.
Pour votre information, voici mon $PATH
Actuel, je pense qu'il devrait être modifié:
/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
S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations. Merci!
[~ # ~] met à jour [~ # ~] :
Je repense sans cesse pourquoi cela devient si fou. Je crois que c'est parce que j'ai installé des choses via:
easy_install
/macports
/homebrew
/fink
/pip
parfois;.dmg
Parfois;.pkg
Parfois;et ils ont fait des choses à différents endroits. Je me demande quel est le mécanisme derrière ces moyens? Comment choisissent-ils l'emplacement cible? Comment les empêcher de tout gâcher?
Comme le dit la mise à jour de OP, il existe différentes manières d’installer Python, qui localisent les fichiers à des emplacements différents. Par exemple, macports
insère des éléments dans /opt/local/
, tandis que homebrew
place les choses dans /usr/local/
. De plus, Mac OS X apporte quelques python versions avec lui-même. Donc, si vous installez python plusieurs fois de différentes façons, vous allez récupère plusieurs python existantes indépendamment sur votre système.
Je ne sais pas exactement. Je suppose que le problème est que si vous avez plusieurs versions de python, celle qui sera utilisée et où trouver les paquetages sera déterminée par l'ordre des chemins dans votre système PATH
et le PYTHONPATH
, respectivement. Vous risquez donc de perdre le contrôle de l'emplacement d'installation des modules python. Pensez-y si vous exécutez Sudo python setup.py install
installer un module (il trouve python par la racine PATH
), puis essaye de import
le module par python -c "import it"
(cette fois, il trouve python d'après votre PATH
), il se peut que quelque chose se passe mal. C'est ma supposition, je ne l'ai pas validée. Mais dans mon cas , quelque chose s'est mal passé.
Je pense que le principe serait que soit conscient du fait que différents outils et outils installent les choses indépendamment à différents endroits, utilisez-les donc de manière réfléchie .
virtualenv
)PATH
et considérez s’il est correct.Comme cela avait déjà été gâché et semblait très difficile à guérir, j'ai finalement résolu cette question en en réinstallant complètement le système d'exploitation , et j'ai commencé suivre les DOs-and-DONTs ci-dessus. Pour l'installation de l'environnement scientifique avec python (numpy/scipy/matplotlib, qui avait montré des problèmes pour me faire poser cette question)), j'ai trouvé ce tutoriel était extrêmement utile, donc, le problème est enfin résolu.
Voici ce qui me déroutait et comment je l'ai résolu.
$ 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
Remarquez donc que je n’avais pas d’installation de python2.7 sur HomeBrew, mais que j’avais l’installation de python3. La version sous/usr/bin/python utilise la valeur par défaut du système. Vous pouvez dire en fonction du chemin de recherche du module:
$ /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/...
Notez le '/ Library/Python' ... qui est la version de Mac OS de python. Mais je veux rester strictement sur une version installée par l'utilisateur (c'est-à-dire HomeBrew).
Alors voici ce que j'ai fait pour résoudre ce problème:
$ brew install python
...
Warning: python 2.7.13 is already installed, it's 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...
Ce n'est plus/Library/.. mais/usr/local.
Maintenant, sa recherche de tous mes modules installés pip! Problème résolu!
PDATE:
Après la mise à jour de brew vers la version 1.5.4, il semble que les liens symboliques aient été supprimés. Et maintenant, vous devez ajouter ceci à votre chemin:
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Lisez la section Avertissements dans 'brasser les infos python':
==> Caveats
This formula installs a python2 executable to /usr/local/bin.
If you wish to have this formula's python executable in your PATH then add
the following to ~/.bash_profile:
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
Pip and setuptools have been installed. To update them
pip2 install --upgrade pip setuptools
You can install Python packages with
pip2 install <package>
They will install into the site-package directory
/usr/local/lib/python2.7/site-packages
See: https://docs.brew.sh/Homebrew-and-Python.html
Afin d’installer une python dans un dossier spécifique, vous pouvez utiliser le fichier --prefix
schéma pendant python. À l’aide du schéma de préfixe , vous pouvez par exemple installer Python 2.7 dans le dossier /opt/py27
. Maintenant, pour utiliser la nouvelle distribution Python installée), vous devez: nettoyer vous [~ # ~] chemin [~ # ~] et LD_LIBRARY_PATH :
C'est ça.
(Au cas où vous auriez besoin de plusieurs environnements de Python installé en même temps, je suggérerais de jeter un oeil à virtualenv ) =
Voici une autre excellente solution pour gérer différentes versions de python:
https://github.com/pyenv/pyenv
(J'ai déjà fourni une réponse ici, mais j'ai décidé de l'afficher comme réponse supplémentaire ou alternative)