Méthode recommandée pour installer des paquets python sur Arch

37

Quelle est la méthode recommandée pour installer les paquets python sur Arch? Les rechercher sur l’AUR et les installer à partir de là (ou créer un PKGBUILDfichier pour créer un paquet vous-même) ou utiliser pip?

J'ai commencé par installer des éléments de pacman et de l'AUR et je ne sais pas s'il serait judicieux de mélanger des pippaquets.

Nils Werner
la source

Réponses:

34

Si vous n'avez pas besoin des packages python pour tous les utilisateurs, vous pouvez les installer chez vous de la manière suivante:

pip install --user packagename

L'installation dans votre maison n'entrera pas en conflit avec le gestionnaire de paquets.

Par défaut pip install --userva installer dans votre répertoire "site utilisateur". Habituellement , c'est quelque chose comme: /home/lesmana/.local/lib/python3.6/site-packages.

La commande suivante imprimera, entre autres, votre emplacement "site utilisateur":

python -m site

Pour personnaliser l'emplacement d'installation:

PYTHONUSERBASE=$HOME/some/dir pip install --user packagename

cela installera tout sous $HOME/some/dir

courir:

PYTHONUSERBASE=$HOME/some/dir $HOME/some/dir/bin/progname

Voir le manuel pip pour plus d'informations.


si vous voulez que le paquet python soit destiné à tous les utilisateurs, le meilleur endroit pour l’installer est /opt. par exemple comme ceci:

PYTHONUSERBASE=/opt/packagedir pip install packagename

(notez les manquants --user)

et pour courir, comme ci-dessus:

PYTHONUSERBASE=/opt/packagedir /opt/packagedir/bin/progname

Explication d'arrière-plan: les /optdistributions gnu / linux reconnaissent généralement que l'utilisateur local ou l'administrateur système peut installer ses propres fichiers. en d'autres termes: le gestionnaire de paquets des distributions ne touche généralement pas /opt. ceci est plus ou moins normalisé dans la norme de hiérarchie des systèmes de fichiers

Pour le confort des utilisateurs, vous voudrez toujours écrire un script de wrapper et le placer dans /binou /usr/bin. Cela risque toujours d'entrer en collision avec le gestionnaire de paquet de distribution, mais au moins, il ne s'agit que d'un fichier de script d'encapsulation. Donc, les dommages qui pourraient être causés sont minimes. Vous pouvez nommer le script d'encapsulation de la manière suivante local-fooou custom-foopour réduire davantage le risque de collision avec le gestionnaire de packages de distribution.

Sinon, vous pouvez modifier PATHpour inclure /opt/binet y placer votre script wrapper. Mais ceci nécessite à nouveau que vous modifiiez un (ou certains) fichier (s) système (s) où PATHest (sont) défini (s) et qui peut à nouveau être écrasé (s) par le gestionnaire de package de distribution.

En bref: si vous souhaitez installer pour tous les utilisateurs, faites-le ensuite /opt. Où vous placez le script wrapper pour plus de confort est un jugement.

Plus d'informations sur /optet la norme de hiérarchie du système de fichiers:

lesmana
la source
IMHO, ceci, avec un pointeur sur la configuration de virtualenvs, devrait être la réponse acceptée.
ttsiodras
1
Pouah. Plus pythontard et j'aurais bien aimé le savoir avant de faire sudiopiping. Merci pour cela.
Hendy
Que faire si vous avez besoin des paquets de python pour tous les utilisateurs?
Mehrdad
@Mehrdad réponse mise à jour
lesmana
@lesmana: Merci! Mais êtes-vous sûr que c'est la façon recommandée de le faire? C'est la première fois que quelqu'un entend suggérer d'utiliser / opt pour Python ...
Mehrdad
9

Généralement, dans une distribution, il est recommandé d'utiliser le gestionnaire de packages de la distribution. Vous pouvez bien sûr installer des choses en utilisant pip (ou, dans le monde perl, cpan), ou les compiler et les installer vous-même. Toutefois, lorsque vous effectuez cette opération, le gestionnaire de packages de la distribution ne les connaît pas et ne peut pas gérer les dépendances ni les mises à jour correspondantes.

L'utilisation de pip est à peu près équivalente à la compilation et à l'installation de votre propre paquet. Faites-le si vous en avez besoin, mais préférez le gestionnaire de paquets de la distribution.

Faucon Momot
la source
2
Vous devez absolument éviter d'utiliser pip(au moins globalement, via sudoou en tant que root) - Je viens de recevoir quelques site-package/...erreurs déjà existantes lorsque j'ai pacmanessayé d'installer des dépendances
Tobias Kienzler
Je viens de recevoir de telles erreurs, aussi. J'avais mis à jour tous les paquets pip3 puis pacman a refusé de faire la mise à jour du système en raison de conflits. Je devais désinstaller ce paquet à la fois via pip3 et pacman, puis faire la mise à niveau du système et enfin réinstaller le paquet (en utilisant pacman, bien sûr).
Al.G.
8

La bonne manière pour ArchLinux

La bonne façon d’installer les paquets PYTHON dans ArchLinux utilise PACMAN! Pour installer des paquets sur Python3, vous devez utiliser

sudo pacman -S python-'package'

Si vous souhaitez installer des packages à partir de Python2, vous devez utiliser

sudo pacman -S python2-'package'

La plupart des packages python se trouvent dans les référentiels ArchLinux et les packages qui ne le sont pas dans AUR (ArchLinux User Repositories). Pour ces packages, vous devez télécharger le fichier PKGBUILD et le compiler. Ensuite, vous devez utiliser PACMAN pour terminer l’installation.

makepkg -s
sudo pacman -U 'compiled-package'

La deuxième bonne façon pour ArchLinux

Lorsque le package n'est pas dans l'AUR ou que PKGBUILD ne fonctionne pas, vous pouvez utiliser PIP pour l'installer dans Python3.

sudo pip install 'python-package'

ou Python2

sudo pip2 install 'python-package'

Vous pourriez donner une chance à virtualenvou mêmeconda

Sur Arch, vous pouvez également utiliser VirtualEnvironments. Cela peut apporter de la portabilité à votre code et conserver les anciens packages. Installez-le avec

sudo pacman -S python-virtualenv

et essayez ceci

virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name

Lorsque vous créez cet environnement yourenv , vous devez pipinstaller des packages uniquement dans cet environnement et non dans le système entier.

Ces autres liens peuvent vous être utiles pour en savoir plus sur la gestion de paquets sous Linux avec conda ou virtualenv:

Installation de paquets Python à partir d'un bloc-notes Jupyter

Code Python sur ArchLinux

Si vous suivez ces règles, votre ArchLinux ne cassera pas et n'aura pas de problèmes de dépendance entre PACMAN et PIP.

J'espère que c'est utile!

Emanuel Fontelles
la source
5

Pour certains paquets (ceux que je ne veux probablement pas pirater), je crée mon propre paquet en utilisant ceci:

https://github.com/bluepeppers/pip2arch

puis construisez et installez le produit PKGBUILD.

Je laisse virtualenvs pour les paquets que je pourrais vouloir modifier ou pirater.

rmorgans
la source
Il y a aussi github.com/wenLiangcan/pip2pkgbuild
Tobias Kienzler
1

En plus des autres réponses ici, consultez le python-virtualenvpackage. Cela peut être très utile si vous développez plusieurs projets avec des dépendances différentes avec des numéros de version incompatibles.

https://wiki.archlinux.org/index.php/Python_VirtualEnv

Notez également qu’il existe deux variantes de pip et virtualenv. Un pour Python 2 et un pour Python 3. Si l'installation échoue avec une erreur de syntaxe, vous essayez peut-être avec une version incorrecte.

bobbaluba
la source