"Bonne façon" de gérer plusieurs versions de Python sur archlinux
alors j'ai lu ceci - https://wiki.archlinux.org/index.php/Python
et il est clair à partir de ce wiki que je peux installer Python 2.7.2 via
pacman -S python2
Est-il raisonnable pour moi de créer un lien symbolique pour python2
ln -s python2 /usr/bin/python
si Je ne m'abandonne pas à passer à python 3.0 bientôt? Ou y a-t-il une meilleure façon de gérer plusieurs versions de python comme celle que j'utilise habituellement sur un système debian (update-alternatives --config python) ou sur un système mac os x (Python select)?
CLARIFICATION:
- ce que j'essaie de découvrir c'est - Quelle est la "meilleure pratique" de gérer différentes versions de python sur un système archlinux?
- je suis nouveau à archlinux mais familier avec ubuntu, debian et mac os x
7 réponses
la plupart des unices ont déjà un /usr/bin/python. Réécrire cela est une mauvaise idée, car c'est la version Python utilisée par tous les paquets du système, et changer cela peut les casser. Lors de l'installation du paquet python 2.7, l'exécutable doit être installé sous /usr/bin/python2.7 (si ce n'est pas le cas, je dirais Qu'Archlinux est cassé) et il est préférable de l'utiliser quand vous voulez lancer Python 2.7.
Archlinux est un peu spécial, puisqu'il utilisera /usr / bin / python pour Python 3, malgré nom de l'exécutable par défaut pour Python 3 étant /usr/bin/python3. C'est déroutant et peut être vu comme un bug, mais cela signifie que vous ne pouvez pas utiliser ce lien symbolique pour Python 2, comme tout autre script Archlinux qui utilise Python 3 se cassera presque certainement si vous le faites.
oui, où sur les autres Unix, faire un lien symbolique /usr/bin/python Python 2.7 est une mauvaise idée, sur Archlinux c'est une idée terrible. Il suffit d'installer toutes les versions dont vous avez besoin et de les appeler avec /usr/bin/pythonX.X.
je dirais que vous ne devriez pas créer de liens symboliques comme cela. Surtout si vous allez à distribuer une partie de votre code python, vous ne devriez pas supposer qu'un utilisateur a python2 ou python3 /usr/bin/python.
Si votre script nécessite python2, il suffit d'utiliser:
#!/usr/bin/env python2
Si votre script nécessite python3, utilisez:
#!/usr/bin/env python3
de cette façon, vos scripts fonctionneront très bien même à travers les mises à jour de Python. Il sera également beaucoup plus clair quelle version de votre script réellement besoin.
Comme d'autres l'ont dit, la réponse courte est "ne faites pas ceci, il sera plus susceptible de casser des choses sur votre système", cependant, surtout si vous utilisez Python 2, vous pouvez toujours définir la valeur par défaut dans votre shell (et ont encore la possibilité de passer à Python 3, à tout moment). Pour ce faire, devenez d'abord root et installez python2-virtualenv
:
# pacman -S python2-virtualenv
puis créer un environnement virtuel qui utilise Python 2 (cela installera automatiquement Python, setuptools, wheel, et pip dans le de l'environnement):
$ virtualenv -p /usr/bin/python2 --system-site-packages ~/env # (Or wherever you want your environment to live)
si vous ne voulez utiliser que des paquets installés localement (par ex. les paquets que vous installez avec pip et pas ceux installés par pacman
) supprimer le --system-site-packages
option lors de la création de votre environnement.
dans votre ~/.bash_profile
ou ~/.profile
(ou quel que soit votre fichier de configuration de shells préféré), définissez quelque chose comme ceci:\
source ~/env/bin/activate
cela activera l'environnement virtuel, rendant votre version par défaut Python 2.
cela peut toujours casser tout ce qui est lancé dans un shell, mais il est peu probable que quoi que ce soit le soit à moins que vous ne l'exécutiez explicitement à partir d'un shell, à ce moment vous pouvez désactiver l'environnement virtuel en exécutant:
deactivate
ou simplement exécuter manuellement Python 3.
Non, il n'y a pas de meilleure façon de le faire. python
symlink fait partie du paquet Python 3.
je suppose que changer ce lien ne cassera rien pour le moment, mais il est possible que certains paquets en dépendent dans le futur.
je viens de tombé sur ce post, pas de nécro-cogner prévu, mais je me demandais personne n'a mentionné virtualenvs. J'utilise aussi ArchLinux et j'utilise les paquets python virtualenv et virtualenvwrapper pour créer plusieurs environnements python. Vous pouvez faire référence aux binaires python 2 ou python3 dans /usr/bin/ pour déterminer la version python utilisée dans l'environnement virtuel.
l'avantage est que les paquets installés dans un environnement virtuel ne le désordre avec le python que le système utilise et il y a plusieurs façons d'automatiser la gestion de projet.
je sais que cela peut être une très vieille réponse, mais il m'a fallu deux jours pour résoudre le problème, donc je vais partager.
bon Gérer les versions de python dans votre système pour travailler sur différents projets sans qu'ils vous rendent fou, c'est utiliser pyenv et ses plugins pyenv-virtualenv et pyenv-virtualenvwrapper comme décrit par Henrique Bastos dans ce post. Notez que cette façon de travailler est un peu indépendant de la plate-forme, puisque pyenv est un paquet python et qu'il peut être exécuté de la même manière sur Windows, Linux et Mac OSx.
les problèmes commencent avec Arch Linux. L'OS ne fournit pas de version pacman de pyenv, vous devez donc l'installer en le clonant à partir de github comme décrit dans le section installation de la version. Le processus d'installation est le même pour pyenv-virtualenv et pyenv-virtualenvwrapper. Notez que l'initialisation de l'interpréteur de commandes la configuration peut être différente, dans mon cas cela n'a pas fonctionné pour ~/.bash_profile, mais il a travaillé pour le ~/.bashrc .
lancer pyenv n'est pas simple si votre installation est très récente comme celle que je mets en place ces jours-ci, puisque pip nécessite openSSL et même si vous l'installez via pacman, pyenv ne le voit pas. Donc, si vous voulez installer une ancienne version de Python (à savoir 3.4.3), vous trouverez que le shell se plaint que vous n'avez pas installé le plugin openSSL, même si vous l'avez. Pour être honnête, je n'avais pas le droit de paquets la première fois que j'ai essayé de l'installer; vous devez télécharger les paquets suivants
sudo pacman -S openssl
sudo pacman -S openssl-1.0
sudo pacman -S python-pyopenssl
sudo pacman -S python2-pyopenssl
La façon dont j'ai résolu le problème consiste à ajouter les drapeaux comme décrit dans la installation pyenv FAQ: cette solution m'a finalement amené à installer la version python que je voulais:
LDFLAGS="-L/usr/lib/openssl-1.0" \
CFLAGS="-I/usr/include/openssl-1.0" \
pyenv install -v 3.4.3
pour éviter d'aller sur la page FAQ chaque fois que vous voulez renouveler l'environnement d'installation de python, vous pouvez ajouter un alias dans ~/.bashrc ou tout ce que vous shell comme suit:
echo alias pyenv='LDFLAGS="-L/usr/lib/openssl-1.0" \
CFLAGS="-I/usr/include/openssl-1.0" \
pyenv' >> ~/.bashrc
de cette façon, vous pouvez installer python correctement avec une syntaxe propre pyenv, et le gérer via ses plugins de la même manière (puisque la syntaxe est pyenv [COMMAND] [OTERSTUFF]).