pas sûr de l'état de pip install --ugrade pip
sur Windows.
besoin de ceci pour PEP453
@pfmoore ?
voir # 188 pour une vieille discussion à ce sujet.
Utilisez python -m pip install --upgrade pip
. Je pense que @vsajip envisageait une forme de magie dans les wrappers exe pour signifier que l'auto-remplacement de l'exe pourrait fonctionner. Mais je ne sais pas s'il a fait quelque chose dans la version de distlib que nous utilisons. Je ne suis pas sûr que ce soit quelque chose qui pourrait être fait sans l'aide de l'application (pip). Et je suis presque sûr qu'aucun code n'a été ajouté à pip pour cela.
Personnellement, je considère que c'est un problème mineur - dire aux gens d'utiliser `` python -m pip '' me semble être une réponse parfaitement acceptable, étant donné que le problème est fondamental dans la manière dont Windows gère la suppression des fichiers ouverts.
En fin de compte, la question sera de savoir combien de complexité (avec le coût de maintenance qui en résulte) et de risque que nous voulons assumer pour résoudre ce problème.
Personnellement, je suis d'accord avec pip install --upgrade pip
impression d'un message à utiliser python -m pip install --upgrade pip
. Je ne pense tout simplement pas que nous devrions lancer une erreur sur les descripteurs de fichiers ouverts ou quelle que soit l'exception.
J'étais sur le point de dire la même chose.
Voici une question - voudriez-vous que ce message n'apparaisse que sur Windows, ou serait-il raisonnable de dire la même chose sous Unix (pour une expérience utilisateur cohérente). Personnellement, j'aimerais être cohérent sur toutes les plateformes (car il est plus facile de documenter de cette façon).
De plus, nous devrions intercepter toute commande qui tente de (ré) installer pip - pip install -I pip
est une autre, par exemple.
Personnellement, je pense que ce ne devrait être que Windows. Je le vois comme un moyen de contourner le fonctionnement de la plate-forme Windows et quelque chose qui est une cible à supprimer éventuellement pour quelque chose de plus agréable sur la route.
Je savais que vous alliez dire cela :-(
Franchement, je ne crois pas que nous obtiendrons jamais «quelque chose de plus agréable», essentiellement parce que nous n'avons pas assez d'expertise Windows pour le développer et le maintenir. Je connais _aucun logiciel Windows avec une solution satisfaisante d'auto-remplacement des exécutables. Je n'ai certainement pas de réponse, et je ne m'attendrais pas à ce qu'aucun des développeurs basés sur Unix puisse vous aider. Même si nous avons obtenu quelque chose, cela risque d'être complexe et donc une source probable de pourriture des bits et de bugs obscurs.
Faire une solution qui fonctionne sur toutes les plateformes la "réponse officielle" me semble éviter d'envoyer des messages déroutants à l'utilisateur. Sauvegardez-le avec un avertissement comme décrit et nous avons une solution robuste, même si ce n'est pas aussi parfait que de faire fonctionner pip install -U pip
.
Veuillez excuser un certain niveau de grognon léger dans cette réponse, causé par le sentiment que c'est toujours la plate-forme Windows qui doit être celle à compromettre - je ne veux pas en faire un problème. En pratique, j'irai avec quel que soit le consensus. Je ne pense pas que ce soit un gros problème.
FWIW, mon objectif après PEP453 est de mettre en place notre propre infrastructure de test qui inclut Windows, donc j'espère que cela résoudra certains des problèmes de Windows Bitrot.
Je peux comprendre la grognon cependant :) Si nous concevions ce système tout nouveau, je serais beaucoup plus modifiable, mais je ne pense pas qu'il soit convivial de casser pip install -U pip
pour tout ce qui n'est pas Windows maintenir la cohérence. S'il s'agissait d'une toute nouvelle chose, il n'y a pas (ou moins) d'attentes de l'utilisateur:]
OK, cela semble juste. Vous avez raison, l'utilisation historique est plus importante ici.
En fait, je n'ai aucune idée de ce qu'est l'expérience utilisateur sous Unix, donc je suis probablement tout aussi coupable de pensée unilatérale que quiconque. Je dois essayer de voir comment utiliser Python sur Linux - existe-t-il une bonne ressource «Python sur Linux pour les débutants» qui montre comment configurer un environnement Python (3), configurer les différents outils, etc.? [Une chose que je trouve toujours qui n'est pas couverte, c'est comment faire tourner "python" Python 3 par défaut, comment faire "virtualenv" construire des virtualenvs Python 3 par défaut, tout ce genre de chose - il me semble que Python 3 est beaucoup plus de seconde classe sous Unix que sous Windows, assez curieusement.]
En règle générale, vous ne voulez pas faire pointer python
vers python3 sur * nix car le système utilise Python et toutes leurs bibliothèques ne seront pas portées vers Python3. Cependant, il existe des distributions Linux qui ont Python3 par défaut maintenant ... Je pense que Arch? Et peut-être le prochain Fedora?
Hmm, je ne parle pas au niveau du système, mais vous ne pouvez vraiment pas choisir quoi utiliser pour Python dans votre compte personnel? Cela fait définitivement de Python 3 une deuxième classe, à mon avis ... Mais cela explique pourquoi les utilisateurs d'Unix ne semblent pas trouver l'utilisation de choses comme "pip3" ou "pip3.3" aussi moche que sin :-)
(De toute façon, nous sommes bien hors sujet ici, alors tant pis).
Vous pouvez configurer votre shell pour qu'il ait ~ / bin / avant le bin système et y ajouter un lien symbolique de python vers python3, mais oui hors-sujet. Je serai ravi de vous aider si vous êtes réellement intéressé par la configuration des choses:] IRC ou Email.
Mon travail auquel je pense que Paul faisait référence était juste d'implémenter la danse «deleteme» pour remplacer les fichiers en cours d'utilisation (c'est-à-dire les wrappers exe) - c'est dans le code distlib
Python, pas dans les wrappers .exe. Ceci est dans le module distlib.scripts
et doit être exercé chaque fois que ce module est utilisé pour créer un script.
Alors peut-être que cela est déjà résolu pour Wheels? Et c'est un problème setuptools autrement?
Cela semble possible. Je vais faire quelques tests aujourd'hui, si je peux.
Malheureusement non, du moins avec "pip install -I pip". (Il est difficile de tester une mise à niveau réelle, car seule la dernière version absolue de pip prend en charge le wrapper de script):
>pip install -f $x -I pip --use-wheel --no-index --pre
Ignoring indexes: https://pypi.python.org/simple/
Downloading/unpacking pip
Installing collected packages: pip
Found existing installation: pip 1.5.dev1
Uninstalling pip:
Successfully uninstalled pip
Cleaning up...
Exception:
Traceback (most recent call last):
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 365, in _rmtree_unsafe
os.unlink(fullname)
PermissionError: [WinError 5] Access is denied: 'c:\\users\\uk03306\\appdata\\local\\temp\\pip-zhbsiy-uninstall\\work\\scratch\\xxyy\\scripts\\pip.exe'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\basecommand.py", line 121, in main
status = self.run(options, args)
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\commands\install.py", line 258, in run
requirement_set.install(install_options, global_options, root=options.root_path)
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 1330, in install
requirement.commit_uninstall()
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 557, in commit_uninstall
self.uninstalled.commit()
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\req.py", line 1743, in commit
rmtree(self.save_dir)
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\util.py", line 42, in rmtree
onerror=rmtree_errorhandler)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 460, in rmtree
return _rmtree_unsafe(path, onerror)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 362, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "C:\Work\Scratch\xxyy\lib\shutil.py", line 367, in _rmtree_unsafe
onerror(os.unlink, fullname, sys.exc_info())
File "C:\Work\Scratch\xxyy\lib\site-packages\pip\util.py", line 61, in rmtree_errorhandler
func(path)
PermissionError: [WinError 5] Access is denied: 'c:\\users\\uk03306\\appdata\\local\\temp\\pip-zhbsiy-uninstall\\work\\scratch\\xxyy\\scripts\\pip.exe'
Storing complete log in C:\Users\uk03306\pip\pip.log
Donc pip
n'utilise pas distlib.scripts
pour installer des scripts ... Je suppose que cela ne rentre pas dans le workflow pip
.
Je soupçonne que c'est parce que nous faisons une désinstallation puis une installation, plutôt qu'une installation écrasant ce qui est là (pour des raisons évidentes).
Windows ne permet pas d'écraser ou de supprimer les fichiers exe ouverts, mais il permet de les renommer / de les déplacer.
Eh bien, avec un peu de folie avec l'API Win32, vous pouvez fermer le handle à pip.exe
tout comme vous le pouvez lorsque vous utilisez l'explorateur de processus de Sysinternal.
Je ne pense pas que vous puissiez fermer toutes les poignées de l'exe en cours d'exécution. Mais si vous avez un code de travail comme exemple, j'aimerais le voir, car cela a longtemps été un problème dont les gens ont débattu et le consensus a toujours été que ce n'est pas possible (sauf par des astuces comme "renommer et supprimer plus tard" ). Un code de travail qui fait cela serait extrêmement utile à la communauté.
Rencontrez le même problème.
En guise de piratage rapide, pip.exe peut-il détecter qu'il est mis à niveau avant son exécution et redémarrer lui-même avec python -m pip {{ sys.argv }}
?
Je ne pense pas que cela fonctionne réellement.
Mais peut-être une pensée stupide, afaik le .exe n'a pas besoin d'être mis à jour, pouvons-nous juste un cas spécial pip.exe et le laisser tranquille? Laisserait peut-être un pip.exe traîner après une installation.
@dstufft correct, "redémarrer soi-même" n'est pas aussi simple que @techtonik le fait sonner sous Windows, où il n'y a pas d'équivalent à l'appel Unix exec
.
Techniquement, pip.exe
peut nécessiter une mise à jour si le point d'entrée change ou si le code du wrapper distlib est changé. Ce n'est pas courant, mais cela peut arriver (au début, le code distlib a changé un peu jusqu'à ce que les choses se stabilisent). Ce qu'il est possible de faire serait d'écrire le nouveau pip.exe
dans un emplacement temporaire, puis s'il est identique à celui actuel, sautez-le. Vous n'éviterez pas les erreurs lorsqu'il a besoin d'être mis à jour, mais dans 99% des cas où ce n'est pas le cas, tout ira bien.
BTW, nous tournons en rond ici. Selon les commentaires précédents de Vinay, cela est résolu dans distlib (c'est là que je pense qu'il devrait être résolu) mais pip n'utilise pas l'API d'une manière qui lui permet de fonctionner. Si nous pouvions utiliser la solution distlib, tant mieux. Sinon, nous avons besoin de quelqu'un pour écrire une solution spécifique à pip (et je reste sceptique que cela puisse être fait d'une manière robuste et maintenable qui n'est pas beaucoup plus complexe que le problème le justifie).
Suggestion:
python -m pip
contournement Je pense que nous sommes au stade où le code de travail réel est la seule chose qui fera avancer ce problème.
Je suis -1 sur le gonflement des documents sans essayer d'autres solutions.
Je suis +1 sur la documentation de ce qui fonctionne actuellement.
Même avec un commentaire doc, c'est toujours une solution de contournement - pas une solution, et vous avez une invite de commande pour Windows erronée.
C'est peut-être fou mais je fais toujours ça:
$ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
bien sûr, cela nécessite que l'on ait libcurl, mais il y a des binaires Windows disponibles ici .
J'ai essayé de l'installer sur un Mac mais j'ai reçu ceci
Alexs-MacBook- Air: Pipmodules aleand $ pip install -U pip
-bash: pip: commande introuvable
Alexs-MacBook- Air: Pipmodules aleand $ python get-pip.py
Téléchargement / déballage de pip
Téléchargement de pip-1.5.5-py2.py3-none-any.whl (1,2 Mo): 1,2 Mo téléchargé
Installation des packages collectés: pip
Nettoyer...
Exception:
Traceback (dernier appel le plus récent):
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/basecommand.py", ligne 122, en main
status = self.run (options, arguments)
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/commands/install.py", ligne 283, en cours d'exécution
jeu_exigence.install (options_installation, options_globales, racine = options.chemin_racine)
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", ligne 1435, en cours d'installation
exigence.install (options_installation, options_globales, _args, * _kwargs)
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", ligne 671, en cours d'installation
self.move_wheel_files (self.source_dir, racine = racine)
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", ligne 901, dans move_wheel_files
pycompile = self.pycompile,
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py", ligne 215, dans move_wheel_files
clobber (source, lib_dir, True)
Fichier "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py", ligne 205, dans clobber
os.makedirs (destdir)
Fichier "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", ligne 157, dans makedirs
mkdir (nom, mode)
OSError: [Errno 13] Autorisation refusée: '/Library/Python/2.7/site-packages/pip'
Stockage du journal de débogage en cas d'échec dans /Users/aleand/Library/Logs/pip.log
@zaducu , je peux dire à partir de votre traceback que vous essayez de mettre à jour la version de pip qui se trouve dans la version de Python préinstallée avec votre mac. Puisque vous mettez à jour la version préinstallée, vous devrez améliorer vos informations d'identification en utilisant sudo
:
$ sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
Pour utiliser sudo
vous devrez peut-être vous ajouter à /etc/sudousers
. Google et vous trouverez de nombreux liens montrant comment procéder.
Mac est intelligent, il garde vos paquets dans /Library/Python
au lieu de corrompre votre dossier /System/Frameworks/Python.framework
site-pacakges
. Yay! Mais pour accéder à ce dossier, vous devez être un administrateur avec les privilèges root, donc sudo
.
Une alternative à considérer est de garder vos packages et modules personnels séparés en utilisant virtualenv
et / ou un dossier .local
. Pour installer des packages dans un dossier local, utilisez distutils
au lieu de pip
et suivez les instructions d' installation des modules python .
D'autres alternatives à l'utilisation du Python pré-installé sont d'utiliser Python officiel , homebrew , MacPorts, Fink ou de le construire vous-même.
Pour Python officiel, vous aurez toujours besoin de sudo
mais il installera la plupart des éléments dans /System/Frameworks
pas /System/Library/Frameworks
Pour Homebrew, vous ne devriez pas avoir besoin de sudo
. Je ne peux pas parler pour MacPorts ou Fink.
J'ai toujours le même problème sous Windows, en passant de la version 1.5.4 à la version 6.0.8:
E: \ Distrib \ Programming> pip install -U pip
Téléchargement / décompression de pip depuis https://pypi.python.org/packages/py2.py3/p/pip/pip-6.0.8-py2.py3-none-any.whl#md5 = 41e73fae2c86ba2270ff51c1d86
f7e09
Installation des packages collectés: pip
Installation existante trouvée: pip 1.5.4
Désinstallation de pip:
Pip correctement désinstallé
Nettoyer...
Exception:
Traceback (dernier appel le plus récent):
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 371, dans _rmtree_unsafe
os.unlink (nom complet)
PermissionError: [WinError 5] Отказано в доступе: 'c: \ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '
Lors de la gestion de l'exception ci-dessus, une autre exception s'est produite:
Traceback (dernier appel le plus récent):
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ basecommand.py", ligne 122, dans main
write_debug_log = check_path_owner (debug_log_path)
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ commands \ install.py", ligne 283, en cours d'exécution
build_delete = (pas (options.no_clean ou options.build_dir))
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", ligne 1443, en cours d'installation
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", ligne 610, dans commit_uninstall
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", ligne 1860, dans commit
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ util.py", ligne 43, dans rmtree
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 478, dans rmtree
return _rmtree_unsafe (chemin, une erreur)
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 368, dans _rmtree_unsafe
_rmtree_unsafe (nom complet, onerror)
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 368, dans _rmtree_unsafe
_rmtree_unsafe (nom complet, onerror)
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 368, dans _rmtree_unsafe
_rmtree_unsafe (nom complet, onerror)
Fichier "C: \ Python \ 3.3-32 \ lib \ shutil.py", ligne 373, dans _rmtree_unsafe
onerror (os.unlink, nom complet, sys.exc_info ())
Fichier "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ util.py", ligne 62, dans rmtree_errorhandler
PermissionError: [WinError 5] Отказано в доступе: 'c: \ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '
Des changements sur ce problème?
Ce n'est pas réparable dans un sens pratique (au moins, quelqu'un devrait fournir un correctif complet et fonctionnel pour l'évaluation s'il pensait que c'était le cas, car personne n'a encore trouvé un moyen de le réparer - c'est essentiellement une limitation de Windows).
La bonne façon de mettre à niveau pip sous Windows est python -m pip install -U pip
.
@pfmoore Et Python 2.6?
[py26] C:\Users\IEUser>python -m pip --version
C:\Users\IEUser\Anaconda\envs\py26\python.exe: pip is a package and cannot be directly executed
@dalcinl Soupir. Je déteste avoir à penser à Python 2.6 :-)
Si je me souviens bien, python -m pip.__main__
y fonctionne. Je n'ai pas de copie de Python 2.6 à portée de main pour le tester pour le moment, désolé ...
Je viens de tester Python 2.6, et python -m pip.__main__
fonctionne effectivement.
salut!
python -m pip install -U pip
ne fonctionne pas pour moi (w7, powershell, python installé via chocolatey); l'installation échoue avec des problèmes d'autorisation:
PS C:\tools> python --version
Python 3.4.3
PS C:\tools> pip --version
pip 6.0.8 from C:\tools\python\lib\site-packages (python 3.4)
PS C:\tools> python -m pip install -U pip
You are using pip version 6.0.8, however version 7.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-7.0.1-py2.py3-none-any.whl#md5=9b403ba9b82d4a1e5fda5b6cc8952b57
Using cached pip-7.0.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 6.0.8
Uninstalling pip-6.0.8:
Exception:
Traceback (most recent call last):
File "C:\tools\python\lib\shutil.py", line 523, in move
os.rename(src, real_dst)
PermissionError: [WinError 5] Access is denied: 'c:\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst' -> 'C:\\Users\\Administrator\\AppData\\Local\\Temp\\pip-4ghq1oa9-uninstall\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\tools\python\lib\site-packages\pip\basecommand.py", line 232, in main
status = self.run(options, args)
File "C:\tools\python\lib\site-packages\pip\commands\install.py", line 347, in run
root=options.root_path,
File "C:\tools\python\lib\site-packages\pip\req\req_set.py", line 543, in install
requirement.uninstall(auto_confirm=True)
File "C:\tools\python\lib\site-packages\pip\req\req_install.py", line 667, in uninstall
paths_to_remove.remove(auto_confirm)
File "C:\tools\python\lib\site-packages\pip\req\req_uninstall.py", line 126, in remove
renames(path, new_path)
File "C:\tools\python\lib\site-packages\pip\utils\__init__.py", line 316, in renames
shutil.move(old, new)
File "C:\tools\python\lib\shutil.py", line 536, in move
os.unlink(src)
PermissionError: [WinError 5] Access is denied: 'c:\\tools\\python\\lib\\site-packages\\pip-6.0.8.dist-info\\description.rst'
Pensées?
Il n'y a aucun moyen de verrouiller ce fichier ou de ne pas avoir l'autorisation de le supprimer. Serait-ce un problème chocolaté? Pouvez-vous supprimer ce fichier manuellement à partir d'une invite de commande?
@AmazingHorse avez-vous essayé
curl -k https://bootstrap.pypa.io/get-pip.py | python
en supposant que vous avez cURL ?
Intéressant, @pfmoore , ce fichier est verrouillé même sur une invite de commande administrateur.
Donc, cela ressemble à un problème d'autorisations Windows plutôt qu'à quelque chose avec pip.
Est-ce que cela a à voir avec le fait que mon python a été installé en dehors de la structure de répertoire Windows dans C:?
Je vais regarder ça mais je suis curieux de savoir si quelqu'un peut poster ici ce qu'il pourrait penser que cela serait causé.
Acclamations gars
@AmazingHorse Honnêtement, je n'en ai aucune idée. L'autre possibilité est qu'il se peut qu'il y ait quelque chose de particulier dans la façon dont Chocolatey installe Python - peut-être signaler le problème sur leur tracker (je suppose qu'ils en ont un?) Et voir ce qu'ils disent.
Mais oui, ce n'est pas un problème de pip à cause du son.
Windows permet de renommer / déplacer les fichiers mappés en mémoire (mappés sous forme d'image ou de données) vers un nouveau nom sur le même volume. Ainsi, le gestionnaire d'erreurs rmtree
peut essayer de renommer le fichier pour le déplacer vers le répertoire temporaire de base. Au moins là, cela n'interférera pas avec la suppression du répertoire. Cette solution de contournement échoue si le fichier se trouve sur un volume différent de celui du répertoire temporaire, ou pour une violation de partage ou si l'ACL du fichier empêche l'opération. Mais aucun de ceux-ci ne devrait s'appliquer dans ce cas.
Si le groupe Administrateurs est activé dans le jeton de processus, la suppression du fichier renommé peut être planifiée au redémarrage du système. Utilisez simplement des ctypes pour appeler MoveFileExW(path, None, MOVEFILE_DELAY_UNTIL_REBOOT)
. Cependant, cela échoue pour les utilisateurs réguliers, car ils ne sont pas autorisés à modifier la valeur de registre PendingFileRenameOperations
du gestionnaire de session.
pip sur Windows 7/10 fonctionne bien sauf pour la mise à jour> pip install --upgrade pip
J'essaie de charger le moins possible sur mon C: \ (SSD) et d'installer le logiciel dans l'arborescence à partir de D: \ NUC \
Voici ce que je vois:
D:\NUC\Python34>pip install --upgrade pip
You are using pip version 6.0.8, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-7.1.2-py2.py3-none-any.whl#md5=5ff9fec0be479e4e36df467556deed4d
Downloading pip-7.1.2-py2.py3-none-any.whl (1.1MB)
100% |################################| 1.1MB 204kB/s
Installing collected packages: pip
Found existing installation: pip 6.0.8
Uninstalling pip-6.0.8:
Exception:
Traceback (most recent call last):
File "D:\NUC\Python34\lib\shutil.py", line 523, in move
os.rename(src, real_dst)
OSError: [WinError 17] The system cannot move the file to a different disk drive: 'd:\\nuc\\python34\\scripts\\pip.exe' -> 'C:\\Users\\David\\AppData\\Local\\Temp\\pip-247i52js-uninstall\\nuc\\python34\\scripts\\pip.exe'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\NUC\Python34\lib\site-packages\pip\basecommand.py", line 232, in main
File "D:\NUC\Python34\lib\site-packages\pip\commands\install.py", line 347, in run
File "D:\NUC\Python34\lib\site-packages\pip\req\req_set.py", line 543, in install
File "D:\NUC\Python34\lib\site-packages\pip\req\req_install.py", line 667, in uninstall
File "D:\NUC\Python34\lib\site-packages\pip\req\req_uninstall.py", line 126, in remove
File "D:\NUC\Python34\lib\site-packages\pip\utils\__init__.py", line 316, in renames
File "D:\NUC\Python34\lib\shutil.py", line 536, in move
os.unlink(src)
PermissionError: [WinError 5] Access is denied: 'd:\\nuc\\python34\\scripts\\pip.exe'
Le chemin du dossier AppData est disponible sur mon lecteur D:, je me demande comment gérer au mieux cette situation pour les outils et l'utilisation ultérieurs. Pensé à une jonction, mais cela ressemblera toujours à un lecteur différent. Peut-être que script les différences de l'emplacement prévu à l'emplacement réel pour vérifier le chemin correct? Avant de faire cela, pip a très bien installé django (mais s'est plaint de la version qui a conduit à cette découverte). hmmm ... et maintenant pip semble cassé.
D:\NUC\Python34\Scripts>pip -h
Traceback (most recent call last):
File "D:\NUC\Python34\lib\runpy.py", line 170, in _run_module_as_main
"__main__", mod_spec)
File "D:\NUC\Python34\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "D:\NUC\Python34\Scripts\pip.exe\__main__.py", line 5, in <module>
ImportError: No module named 'pip'
D:\NUC\Python34\Scripts>dir
Volume in drive D is TOSHIBA EXT
Volume Serial Number is E085-D5D7
Directory of D:\NUC\Python34\Scripts
08/25/2015 09:08 AM <DIR> .
08/25/2015 09:08 AM <DIR> ..
08/25/2015 09:08 AM 92,045 django-admin.exe
08/25/2015 09:08 AM 136 django-admin.py
08/25/2015 09:01 AM 346 easy_install-3.4-script.py
08/25/2015 09:01 AM 65,536 easy_install-3.4.exe
08/25/2015 09:01 AM 651 easy_install-3.4.exe.manifest
08/25/2015 09:01 AM 338 easy_install-script.py
08/25/2015 09:01 AM 65,536 easy_install.exe
08/25/2015 09:01 AM 647 easy_install.exe.manifest
08/25/2015 08:19 AM 91,984 pip.exe
08/25/2015 08:19 AM 91,984 pip3.4.exe
08/25/2015 08:19 AM 91,984 pip3.exe
08/25/2015 09:08 AM <DIR> __pycache__
11 File(s) 501,187 bytes
3 Dir(s) 328,895,152,128 bytes free
D:\NUC\Python34\Scripts>
vous devez faire python.exe -m pip install --upgrade pip
Sur Python 2.6, vous devez exécuter python -m pip.__main__ install -U pip
Je considère que la situation actuelle est vraiment mauvaise pour les nouveaux utilisateurs de Python ainsi que pour les anciens utilisateurs de Python comme moi qui n'utilisent généralement pas Windows. Je suis tout à fait bien en utilisant python -m pip install --upgrade pip
, mais je pense vraiment que pip install --upgrade pip
devrait le recommander automatiquement sur Windows. @dstufft a déjà proposé cela en 2013. Y a-t-il une bonne raison de ne pas le faire?
PS: Désolé d'avoir signalé le # 3462 comme un double de ce problème. Je n'ai pas trouvé ce problème en recherchant dans le tracker WindowsError
. J'espère qu'après ce commentaire, d'autres le feront à l'avenir.
A ma connaissance, c'est déjà la commande que pip propose à l'utilisateur lors de la détection d'une nouvelle version de lui-même. La situation n'est pas si mauvaise.
@pekkaklarck La principale raison de ne pas le faire est que c'est vraiment difficile à repérer. Pour commencer, je ne sais pas comment détecter de manière fiable que pip est exécuté à partir de pip.exe
plutôt que de python -m pip
. Et même si vous détectez cela, vous devez vérifier si pip
est dans les éléments en cours d'installation (considérez pip install --upgrade -r http://some.remote/requirements.txt
- au moment où vous avez lu le fichier des exigences, il est sans doute trop tard pour émettre le message).
Bien sûr, quelque chose qui n'est pas parfait à 100% est une chose tout à fait raisonnable à mettre en œuvre - c'est de s'assurer que nous ne nous opposons pas à des utilisations entièrement valides, plutôt que de nous assurer que nous attrapons tous les cas secondaires, c'est vraiment important.
Nous envisagerions certainement de fusionner un PR pour résoudre ce problème, mais je ne pense pas qu'aucun des principaux développeurs de pip trouve le problème suffisamment problématique pour tenter de le réparer lui-même (je suis probablement l'utilisateur Windows le plus lourd des développeurs de base, et Je trouve que se souvenir d'utiliser python -m pip
raisonnablement facile).
pour savoir si nous sommes pip[.exe]
ou non, j'imagine
"pip" in os.path.basename(sys.argv[0])
fonctionnerait très bien. Un simple avertissement de voir [-U|--upgrade]
et pip
dans l'invocation serait probablement suffisant pour corriger 90% des appels.
@stonebig : Pourriez-vous préciser quand cette commande est recommandée? J'ai essayé pip install -U pip
après une nouvelle installation de Python 2.7.11 et cela a échoué avec cette erreur:
WindowsError: [Erreur 5] L'accès est refusé: 'c: \ users \ koulutus \ appdata \ local \ temppip-65z4kx-uninstallpython27 \ scriptspip.exe'
@pfmoore : la mise à niveau de pip dans le fichier d'exigences semble assez rare et pourrait probablement être ignorée. Comme @Ivoz, je pensais que pip.exe
serait en sys.argv
. Sinon, il devrait être possible d'attraper le WindowsError
et d'y réagir.
@Ivoz ça marche? Je pensais que le wrapper pip.exe invoquait python comme sous-processus, donc cela ne fonctionnerait pas. Mais un test rapide (impression de sys.argv[0]
dans pip.main()
) montre:
>py -m pip
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\lib\site-packages\pip\__main__.py
Usage:
...
>pip
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\Scripts\pip
Usage:
...
>pip.exe
C:\Users\Gustav\AppData\Local\Programs\Python\Python35\Scripts\pip
Usage:
Cela fonctionne, mais vous devez faire attention à la façon dont vous repérez pip
dans sys.argv[0]
(notez que le premier exemple inclut le répertoire pip
dans le chemin vers __main__.py
)
Merci de l'avoir signalé. J'ai appris quelque chose aujourd'hui :-)
@pekkaklarck Le problème avec la capture du WindowsError
(si je me souviens bien) est que cela arrive assez tard et que l'installation est partiellement terminée (et pas facile à restaurer).
Mais je ne veux décourager personne d'essayer de résoudre ce problème, alors je vais en rester là :-)
mais vous devez faire attention à la façon dont vous repérez pip dans sys.argv [0]
@pfmoore d' où l'appel à os.path.basename
.
@Ivoz Sigh. Trop tard dans la nuit ici. Oui bien sûr :-)
@pekkaklarck . par exemple en faisant pip list
(sous windows). Autant que je me souvienne lors des discussions de l'année dernière:
Il pourrait y avoir une meilleure solution, mais je suppose que c'est déjà 80% d'une réponse parfaite de la situation précédente.
Peut-être qu'une meilleure solution serait d'avoir un "upgrade_pip.bat" livré avec l'installation Windows par défaut de python, pas serré à "pip", et cela ferait cette commande. (ou pip_update.bat
pour mieux correspondre à conda?)
Je l'ai frappé aujourd'hui en plongeant dans la nouvelle expérience utilisateur Windows Python. C'était terrible.
Pouvons-nous rendre -m
automatique pour cette commande? (peut-être donner sa propre commande à la mise à niveau de pip?)
Aucun utilisateur ne devrait jamais avoir à voir cela, surtout après avoir exécuté exactement la commande _pip leur a dit d'exécuter_.
Je pense que nous avons déjà la configuration de la journalisation dans les versions plus récentes de pip que 7.0.1 pour dire aux utilisateurs de Windows d'utiliser python -m pip install --upgrade pip
au lieu de pip install --upgrade pip
.
: sparkles:: cake:: sparkles:
Oui, depuis 7.1 cf # 2830
\ O /
Je ne peux pas mettre à jour mon pip sur Win 10, qu'est-ce qui ne va pas?
@grasx
Si vous voulez vraiment savoir ce qui ne va pas, veuillez lire ce fil de discussion. Si vous souhaitez uniquement que cela fonctionne, veuillez lire la dernière ligne de la sortie que vous avez obtenue et la comparer avec ce que vous avez exécuté.
@ piotr-dobrogost
C'est ça? La dernière ligne rouge semble indiquer un problème de décodage, plutôt que l'erreur d'accès refusé qui est le résultat habituel d'une mise à jour en place sous Windows. Le problème de @grasx pourrait-
Je doute que le problème rencontré par @grasx soit lié à ce problème. J'ai cependant vu des problèmes similaires sur Windows. Voir # 3463.
@nmusatti
Vous avez raison. Ma faute.
@ piotr-dobrogost @nmusatti @pekkaklarck Cependant, merci, j'ai changé le nom de l'utilisateur, donc maintenant il ne contient que des caractères ASCII et pip a été mis à jour avec succès vers la 8.1
@grasx a changé le nom de l'utilisateur? Je suis confus dans ce que vous avez dit ... J'ai eu le même problème, quelque chose de différent est que j'étais dans Windows 7
idée aléatoire, que diriez-vous de ne pas remplacer le fichier exe si ce n'est pas nécessaire
pour autant que je sache, les fichiers exe sont de très petits trampolines qui fonctionnent généralement
la logique la plus importante se trouve dans les fichiers de script d'accompagnement
@ pzz2011 En fait, j'ai réinstallé mon win et défini un nouveau nom d'utilisateur. C'était plus facile dans mon cas alors de savoir comment le changer dans tous les endroits et itinéraires où il est mentionné :)
@RonnyPfannschmidt Dépend de ce qui est utilisé pour écrire le .exe - setuptools utilisé pour utiliser foo.exe
+ foo-script.py
(pas sûr de ce qu'il fait maintenant), alors que distlib (si configuré) crée un seul foo.exe
qui intègre le script.
@grasx hhh ... J'ai trouvé un moyen plus simple de le résoudre. Je viens de réinstaller le python de 2.7.x à 2.7.10.
Puis le succès me sourit ~
Sous Windows, utilisez les fenêtres d'invite de commandes en mode Administrateur. Puis tapez commande
python -m pip install --upgrade pip
J'espère que cela fonctionne pour vous. Voilà comment je l'ai fait fonctionner une fenêtre 10
Bonne chance.
@grasx Je ne
Juste un FYI, pour les utilisateurs de Windows. Si vous installez Cygwin, Python2.7 est automatiquement installé. Il ne vous reste plus qu'à exécuter:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
(Oui, vous devez d'abord installer wget
.)
Comment résoudre ce problème?
@ JingY0604
Voir Pour copier du texte à partir d'une fenêtre d'invite de commande pour une explication sur la façon de copier du texte ici. De cette façon, le texte que vous publiez sera consultable.
Vous utilisez la version 7.1.0 de pip, mais la version 9.0.1 est disponible.
Vous devriez envisager de mettre à jour via la comm 'python -m pip install --upgrade pip'
et.
D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_vendorrequ
ests \ packages \ urllib3 \ util \ ssl_.py: 90: InsecurePlatformWarning: Un vrai SSLContex
L'objet t n'est pas disponible. Cela empêche urllib3 de configurer SSL approprié
et peut entraîner l'échec de certaines connexions SSL. Pour plus d'informations, voir htt
ps: //urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
Plates-formes non sécurisées
Collecte de pip
Téléchargement de pip-9.0.1-py2.py3-none-any.whl (1,3MB)
Exception:
Traceback (dernier appel le plus récent):
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ base
command.py ", ligne 223, dans main
status = self.run (options, arguments)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ comm
ands \ install.py ", ligne 282, en cours d'exécution
requirements_set.prepare_files (chercheur)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", ligne 334, dans prepare_files
functools.partial (self._prepare_file, finder))
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", ligne 321, dans _walk_req_to_install
more_reqs = gestionnaire (req_to_install)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", ligne 491, dans _prepare_file
session = auto.session)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", ligne 825, dans unpack_url
session,
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", ligne 673, dans unpack_http_url
from_path, content_type = _download_http_url (lien, session, rép_temp)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", ligne 886, dans _download_http_url
_download_url (resp, lien, content_file)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", ligne 621, dans _download_url
pour le bloc en cours_indicator (resp_read (4096), 4096):
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ util
s \ ui.py ", ligne 135, dans iter
self.next (n)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress__init __. py ", ligne 73, dans la prochaine
self.update ()
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ bar.py ", ligne 82, dans la mise à jour
self.writeln (ligne)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ helpers.py ", ligne 69, dans writeln
print (ligne, fin = '', fichier = self.file)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", ligne 133, en écriture
self.write_and_convert (texte)
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", ligne 161, dans write_and_convert
self.write_plain_text (texte, curseur, len (texte))
Fichier "D: \ Program Files \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", ligne 166, dans write_plain_text
self.wrapped.write (texte [début: fin])
UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère u '\ u258f' en position 8
: ordinal pas dans l'intervalle (128)
@ JingY0604 Voir # 3463.
Vous pouvez mettre à niveau votre pip en désinstallant l'installation existante et en utilisant get-pip.py pour installer la nouvelle version.
Pour https://github.com/ofek/hatch, j'attrape simplement toutes les instances de mise à jour de soi et je l'interdis. J'ai alors un indicateur --self explicite pour faire apparaître un python -m pip install -U hatch
et sortir immédiatement.
https://github.com/ofek/hatch/blob/22e621715fbed36c2bfab35ae9fa9649ea6dfe1e/hatch/cli.py#L509
edit: techniquement, au lieu de seulement python
, sys.executable
est utilisé en fait
@ofek # 4490 a fait un changement dans pip, imprimant un meilleur message, IIRC.
Donc pour l'instant, si j'ai installé python sans pip, je ne pourrai plus installer le module pip à l'avenir?
c:\Python27>python.exe get-pip.py
ERROR: To modify pip, please run the following command:
c:\Python27\python.exe -m pip
c:\Python27>c:\Python27\python.exe -m pip install
c:\Python27\python.exe: No module named pip
Salut @ihormelnyk!
Ce n'est pas le cas. Le conditionnel pour cela était trop large - il empêche l'utilisation de tout script contenant le mot «pip» de modifier pip. Vous pouvez essayer de renommer get-pip.py pour ne pas contenir le mot «pip», pour contourner ce problème.
Une version 10.0.1 (qui se produira probablement cette semaine) résoudra ce problème.
@pradyunsg merci d'avoir partagé le conseil. J'ai eu le même problème que @ihormelnyk et renommer le fichier get-pip.py
en un nom qui ne contient pas le mot pip
aidé.
J'imprime pip dans cmd inwindows, mais il a montré
Erreur fatale dans le lanceur: impossible de créer le processus en utilisant '"" d: \ program files (x86) python3.6python.exe "" D: \ Program Files (x86) python3.6 \ Scriptspip.exe "'
J'ai déjà défini l'environnement pour pip, mais cela ne fonctionne pas, comment le résoudre?
@ BJQ98 Vous voudriez regarder # 5223.
pradyunsg a dit que 10.0.1 réglerait ce problème, mais je ne sais pas comment. Merci.
C:\Users\clarkk\AppData\Local\Programs\Python\Python36>python -m pip install -U pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 9.0.3
Uninstalling pip-9.0.3:
Successfully uninstalled pip-9.0.3
Rolling back uninstall of pip
Exception:
Traceback (most recent call last):
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\basecommand.py", line 215, in main
status = self.run(options, args)
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\commands\install.py", line 342, in run
prefix=options.prefix_path,
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\req\req_set.py", line 784, in install
**kwargs
File "C:\Users\yangg\AppData\Roaming\Python\Python36\site-packages\pip\req\req_install.py", line 851, in install
self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\req\req_install.py", line 1064, in move_wheel_files
isolated=self.isolated,
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\wheel.py", line 462, in move_wheel_files
generated.extend(maker.make(spec))
File "C:\Users\yangg\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 372, in make
self._make_script(entry, filenames, options=options)
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 276, in _make_script
self._write_script(scriptnames, shebang, script, filenames, ext)
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 212, in _write_script
launcher = self._get_launcher('t')
File "C:\Users\clarkk\AppData\Roaming\Python\Python36\site-packages\pip\_vendor\distlib\scripts.py", line 351, in _get_launcher
result = finder(distlib_package).find(name).bytes
AttributeError: 'NoneType' object has no attribute 'bytes'
You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Ce sera la même chose que # 5343.
Merci pradyunsg, la solution de quelqu'un d'autre s'avère plus simple. Je viens d'exécuter "python -m pip uninstall pip" d'abord, puis "python -m pip install -U pip"
Exigence déjà à jour: pip dans c: \ user \ clarkk \ appdata \ local \ Programs \ Python \ Python36 \ lib \ site-packages (10.0.1)
Personally I think it should be windows only. I view it as a work around for the way the Windows platform works, and something that's a target to eventually remove for something nicer down the road.
J'obtiens une erreur lors de l'exécution de la commande ci-dessus en tant qu'erreur de syntaxe du mot obtenir quelle pourrait être la solution pour cela
@AProNoob Vous devez exécuter les commandes à une invite de commande (cmd ou powershell), et non à une invite Python.
Merci! Ça a marché!
Ce thread a été automatiquement verrouillé car il n'y a eu aucune activité récente après sa fermeture. Veuillez ouvrir un nouveau numéro pour les bogues associés.
Commentaire le plus utile
Sous Windows, utilisez les fenêtres d'invite de commandes en mode Administrateur. Puis tapez commande
python -m pip install --upgrade pip
J'espère que cela fonctionne pour vous. Voilà comment je l'ai fait fonctionner une fenêtre 10
Bonne chance.