web-dev-qa-db-fra.com

Pip spécifie une erreur sur Ubuntu 16.04. Et, les paquets venv apparaissent lorsque l'environnement est désactivé

Ceci est identique à cette question, mais le titre est incorrect. Et les symptômes sont plus odieux que ce qui est expliqué dans ce post .

D'une mise à niveau Ubuntu 14.04 à 16.04 - Pip affiche les paquetages installés dans un environnement virtuel actif, même lorsque venv est désactivé.

De plus, lors de l’installation d’un paquet, pip émet cette erreur:

The directory '/home/user/.cache/pip/http' or its parent directory is
not owned by the current user and the cache has been disabled. Please
check the permissions and owner of that directory. If executing pip
with Sudo, you may want Sudo's -H flag. The directory
'/home/user/.cache/pip' or its parent directory is not owned by the
current user and caching wheels has been disabled. check the
permissions and owner of that directory. If executing pip with Sudo,
you may want Sudo's -H flag.  

Je reçois également une erreur d'autorisation lorsque je fais pip install <package_name> Je peux contourner cela avec pip install --user <package_name>. Et Sudo ne fonctionnera comme ci-dessus qu'avec l'option -H.

Toute idée ou solution possible à cette erreur serait formidable! Merci d'avance!

Ed

1
edlee

J'ai trouvé la réponse à la question. Cela se produit parce que Virtualenv est installé avec Sudo et que le fichier pip/.cache appartient à l'utilisateur. Certains paquets nécessiteront un accès à Sudo. Vous trouverez ci-dessous des informations sur le problème et la référence. J'ai ajouté un guide idiots ci-dessous l'explication de cette erreur.

  1. Lorsque les packages installés globalement se trouvent sur le chemin python et qu'ils sont en conflit avec les exigences d'installation, ils sont ignorés et non désinstallés.
  2. Lorsque les packages installés globalement se trouvent sur le chemin python et répondent aux exigences d'installation, pip ne fait rien et indique que cette exigence est satisfaite (similaire à la manière dont les packages globaux peuvent satisfaire aux exigences lors de l'installation de packages dans un --system -site-packages virtualenv).
  3. pip n'effectuera pas d'installation --user dans un virtualenv --no-site-packages (c'est-à-dire le type de virtualenv par défaut), car le site de l'utilisateur ne se trouve pas sur le chemin python. L'installation serait inutile.
  4. Dans un --system-site-packages virtualenv, pip n'installe pas de paquet en conflit avec un paquet du paquet virtualenv site. L'installation --user manquerait de priorité sys.path et serait inutile.

Plus d'informations peuvent être lues ici https://pip.pypa.io/en/stable/user_guide/#user-installs .

Mon correctif

  1. Suppression de tous les packages de projet dans ~/user/.cache. Lequel a été installé "à tort" pip uninstall -r <path_to_project_requirements.txt> (préfixe N.B. avec Sudo lorsque requis).

  2. Suppression de virtualenv Sudo pip uninstall virtualenv

  3. Installez virtualenv en utilisant: pip --user install virtualenv. Ce qui va arrêter les problèmes de propriété. Et, vous évitez d'avoir à l'installer globalement avec Sudo - vous pourriez également utiliser le wrapper virtualenv qui vous épargnerait probablement une partie de cette douleur, mais je ne suis pas ...

  4. Créez votre répertoire de projet: mkdir <project> et entrez-y cd project.

  5. virtualenv venv créez votre dossier d'environnement local pour installer vos packages dans . venv/bin/activate

  6. continuer l'installation des exigences de votre projet.

0
edlee