no estoy seguro del estado de pip install --ugrade pip
en Windows.
Necesito esto para PEP453
@pfmoore ?
vea el n. ° 188 para una vieja discusión sobre esto.
Utilice python -m pip install --upgrade pip
. Creo que @vsajip estaba considerando alguna forma de magia en los envoltorios exe para significar que el auto-reemplazo del exe podría funcionar. Pero no sé si hizo algo en la versión de distlib que estamos usando. En realidad, no estoy seguro de que sea algo que _ podría_ hacerse sin la ayuda de la aplicación (pip). Y estoy bastante seguro de que no se ha agregado ningún código a pip para esto.
Personalmente, considero que esto es un problema menor: decirle a la gente que use `python -m pip`` me parece una respuesta perfectamente aceptable, dado que el problema es fundamental para cómo Windows maneja la eliminación de archivos abiertos.
En última instancia, será una cuestión de cuánta complejidad (con el consiguiente coste de mantenimiento) y riesgo queremos asumir para solucionar este problema.
Personalmente, estoy de acuerdo con que pip install --upgrade pip
imprima un mensaje para usar python -m pip install --upgrade pip
. Simplemente no creo que debamos lanzar un error sobre los identificadores de archivos abiertos o cualquiera que sea la excepción.
Estaba a punto de decir lo mismo.
Aquí hay una pregunta: ¿le gustaría que ese mensaje solo apareciera en Windows o sería razonable decir lo mismo en Unix (para una experiencia de usuario consistente)? Personalmente, me gustaría ser coherente en todas las plataformas (porque es más fácil documentar de esa manera).
Además, deberíamos capturar cualquier comando que intente (re) instalar pip - pip install -I pip
es otro, por ejemplo.
Personalmente, creo que debería ser solo Windows. Lo veo como una solución para la forma en que funciona la plataforma de Windows, y algo que es un objetivo que eventualmente eliminará para algo mejor en el futuro.
Sabía que ibas a decir eso :-(
Francamente, no creo que alguna vez obtengamos "algo mejor", básicamente porque no tenemos suficiente experiencia en Windows para desarrollarlo y mantenerlo. Sé de _no_ software de Windows con una solución satisfactoria de auto-reemplazo de ejecutables. Ciertamente no tengo una respuesta, y no esperaría que ninguno de los desarrolladores basados en Unix pudiera ayudar. Incluso si obtuviéramos algo, es probable que sea complejo y, por lo tanto, una fuente probable de descomposición de bits y errores oscuros.
Hacer una solución que funcione en todas las plataformas me parece que la "respuesta oficial" evita enviar mensajes confusos al usuario. Realice una copia de seguridad con una advertencia como se describe y tendremos una solución sólida, incluso si no es tan perfecta como hacer que pip install -U pip
funcione.
Por favor, disculpe un cierto nivel de mal humor en esta respuesta, causado por la sensación de que siempre es la plataforma Windows la que tiene que comprometerse; no quiero convertir esto en un problema. En la práctica, seguiré el consenso que sea. No creo que sea gran cosa.
FWIW, mi objetivo después de que PEP453 esté listo es poner en funcionamiento nuestra propia infraestructura de prueba que incluye Windows, así que espero que eso resuelva algunos de los problemas de bitrot de Windows.
Sin embargo, puedo entender el mal humor :) Si estuviéramos diseñando este sistema completamente nuevo, sería mucho más adaptable a eso, pero no creo que sea fácil de usar romper pip install -U pip
para todo lo que no sea Windows para mantener la consistencia. Si esto fue algo nuevo, entonces no hay (o al menos menos) expectativas del usuario:]
OK, eso suena justo. Tienes razón en que el uso histórico es más importante aquí.
De hecho, no tengo la menor idea de cuál es la experiencia del usuario en Unix, por lo que probablemente soy tan culpable de pensar unilateralmente como cualquier otra persona. Debo intentar ver cómo se siente el uso de Python en Linux: ¿hay un buen recurso de "Python en Linux para principiantes" que muestre cómo configurar un entorno Python (3), configurar las diversas herramientas, etc.? [Una cosa que siempre encuentro que no se cubre, es cómo hacer que "python" ejecute Python 3 por defecto, cómo hacer que "virtualenv" compile Python 3 virtualenvs por defecto, todo ese tipo de cosas - me parece que Python 3 es mucho más de segunda clase en Unix que en Windows, por extraño que parezca.]
Por lo general, no desea hacer que python
apunte a python3 en * nix porque el sistema usa Python y no todas sus bibliotecas se migrarán a Python3. Sin embargo, hay algunas distribuciones de Linux que tienen Python3 como predeterminado ahora ... creo que Arch? ¿Y quizás el próximo Fedora?
Hmm, no estoy hablando a nivel de sistema, pero ¿realmente no puedes elegir qué usar para Python en tu cuenta personal? Eso definitivamente hace que Python 3 sea de segunda clase, en mi opinión ... Pero explica por qué los usuarios de Unix no parecen encontrar el uso de cosas como "pip3" o "pip3.3" tan feo como el pecado :-)
(De todos modos, estamos muy fuera del tema aquí, así que no importa).
Puede configurar su shell para que tenga ~ / bin / antes del bin del sistema y agregar un enlace simbólico allí de python a python3, pero sí, offtopic. Sin embargo, me complace ayudarlo si realmente está interesado en configurar las cosas:] IRC o correo electrónico.
Mi trabajo al que creo que Paul se refería era solo implementar el baile 'deleteme' para reemplazar archivos en uso (es decir, envoltorios exe), eso está en el código distlib
Python, no en los envoltorios .exe. Esto está en el módulo distlib.scripts
y debe ejercerse siempre que ese módulo se utilice para crear un script.
Entonces, ¿quizás esto ya esté resuelto para Wheels? ¿Y es un problema de setuptools si no?
Suena posible. Hoy haré algunas pruebas, si puedo.
Lamentablemente no, al menos con "pip install -I pip". (Es difícil probar una actualización real, ya que solo la última versión absoluta de pip tiene soporte para envoltorios de scripts):
>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
Entonces pip
no usa distlib.scripts
para instalar scripts ... supongo que no encaja en el flujo pip
trabajo
Sospecho que es porque hacemos una desinstalación y luego una instalación, en lugar de una instalación sobrescribiendo lo que está allí (por razones obvias).
Windows no permite sobrescribir o eliminar archivos exe abiertos, pero sí permite cambiarles el nombre o moverlos.
Bueno, con algunas tonterías con la API de Win32, puede cerrar el controlador a pip.exe
como puede hacerlo cuando usa el explorador de procesos de Sysinternal.
No creo que pueda cerrar todos los controladores del exe que se está ejecutando actualmente. Pero si tiene un código que funciona como ejemplo, me encantaría verlo, ya que durante mucho tiempo ha sido un problema que la gente ha debatido y el consenso siempre ha sido que no es posible (excepto con trucos como "cambiar el nombre y eliminar más tarde" ). Un código de trabajo que haga esto sería extremadamente útil para la comunidad.
Se encuentra con el mismo problema.
Como truco rápido, ¿puede pip.exe detectar que se está actualizando antes de la ejecución y reiniciarse con python -m pip {{ sys.argv }}
?
No creo que eso realmente funcione.
Pero tal vez un pensamiento estúpido, afaik el .exe no necesita ser actualizado, ¿podemos simplemente pip.exe en un caso especial y dejarlo solo? Sin embargo, posiblemente dejaría un pip.exe por ahí después de una instalación.
@dstufft correcto, "reiniciarse a sí mismo" no es tan simple como @techtonik lo hace sonar en Windows, donde no hay equivalente a la llamada de Unix exec
.
Técnicamente, pip.exe
puede necesitar una actualización si cambia el punto de entrada o si se cambia el código contenedor de distlib. Eso no es común, pero puede suceder (al principio, el código distlib cambió un poco hasta que las cosas se calmaron). Lo que sería posible hacer sería escribir el nuevo pip.exe
en una ubicación temporal, luego, si es idéntico al actual, omítalo. No evitaría errores cuando necesitara actualizarse, pero en el 99% de los casos en los que no lo hizo, estaría bien.
Por cierto, estamos dando vueltas aquí. De acuerdo con los comentarios anteriores de Vinay, esto se resuelve en distlib (que es donde creo que debería resolverse), pero pip no usa la API de una manera que le permita funcionar. Si pudiéramos usar la solución distlib, entonces genial. De lo contrario, necesitamos que alguien escriba una solución específica para pip (y sigo siendo escéptico de que esto se pueda hacer de una manera sólida y mantenible que no sea mucho más compleja de lo que justifica el problema).
Sugerencia:
python -m pip
en Windows al actualizar pip consigo mismo. Podría tener la oportunidad de hacer esto en algún momento, pero las relaciones públicas de las personas que han contribuido a este problema serían aceptadas con gratitud :-).Creo que estamos en una etapa en la que el código de trabajo real es lo único que hará avanzar este problema.
Soy -1 en inflar los documentos sin probar otras soluciones.
Soy +1 en documentar lo que funciona en este momento.
Incluso con el comentario del documento, sigue siendo una solución alternativa, no una solución, y tiene el símbolo del sistema de Windows incorrecto.
Tal vez esto sea una locura, pero siempre hago esto:
$ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
por supuesto, esto requiere que uno tenga libcurl, pero hay binarios de Windows disponibles aquí .
Intenté instalarlo en una Mac pero recibí este
Alexs-MacBook- Air: Pipmodules ale y $ pip install -U pip
-bash: pip: comando no encontrado
Alexs-MacBook- Air: Pipmodules ale y $ python get-pip.py
Descargando / desempaquetando pip
Descargando pip-1.5.5-py2.py3-none-any.whl (1.2MB): 1.2MB descargados
Instalación de paquetes recopilados: pip
Limpiar...
Excepción:
Rastreo (llamadas recientes más última):
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/basecommand.py", línea 122, en main
status = self.run (opciones, argumentos)
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/commands/install.py", línea 283, en ejecución
requisito_set.install (install_options, global_options, root = options.root_path)
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", línea 1435, en instalación
requisito.install (opciones_instalación, opciones_globales, _args, * _kwargs)
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", línea 671, en instalación
self.move_wheel_files (self.source_dir, root = root)
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/req.py", línea 901, en move_wheel_files
pycompile = self.pycompile,
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py", línea 215, en move_wheel_files
clobber (fuente, lib_dir, True)
Archivo "/var/folders/8g/b9q8snrd5ln_d5hqnwh2_86r0000gn/T/tmpFTGrC3/pip.zip/pip/wheel.py", línea 205, en clobber
os.makedirs (destdir)
Archivo "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", línea 157, en makedirs
mkdir (nombre, modo)
OSError: [Errno 13] Permiso denegado: '/Library/Python/2.7/site-packages/pip'
Almacenamiento del registro de depuración por fallas en /Users/aleand/Library/Logs/pip.log
@zaducu , puedo decir por su rastreo que está tratando de actualizar la versión pip que está en la versión de Python que vino preinstalada con su mac. Dado que está actualizando la versión preinstalada, deberá elevar sus credenciales usando sudo
:
$ sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
Para usar sudo
es posible que deba agregarse a /etc/sudousers
. Búscalo en Google y encontrarás numerosos enlaces que muestran cómo hacer esto.
Mac es inteligente, mantiene sus paquetes en /Library/Python
lugar de corromper su carpeta /System/Frameworks/Python.framework
site-pacakges
. ¡Hurra! Pero para acceder a esta carpeta debe ser un administrador con privilegios de root, por lo tanto sudo
.
Una alternativa a considerar es mantener sus paquetes y módulos personales separados usando virtualenv
y / o una carpeta .local
. Para instalar paquetes en una carpeta local, use distutils
lugar de pip
y siga las instrucciones sobre la instalación de módulos de Python .
Otras alternativas al uso de Python preinstalado son usar Python oficial , homebrew , MacPorts, Fink o construirlo usted mismo.
Para Python oficial, todavía necesitará sudo
pero instalará la mayoría de los elementos en /System/Frameworks
no /System/Library/Frameworks
Para Homebrew, no debería necesitar sudo
. No puedo hablar por MacPorts o Fink.
Todavía tengo el mismo problema en Windows, actualizando de 1.5.4 a 6.0.8:
E: \ Distrib \ Programming> pip install -U pip
Descargando / desempaquetando pip de https://pypi.python.org/packages/py2.py3/p/pip/pip-6.0.8-py2.py3-none-any.whl#md5 = 41e73fae2c86ba2270ff51c1d86
f7e09
Instalación de paquetes recopilados: pip
Instalación existente encontrada: pip 1.5.4
Desinstalar pip:
Pip desinstalado con éxito
Limpiar...
Excepción:
Rastreo (llamadas recientes más última):
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 371, en _rmtree_unsafe
os.unlink (nombre completo)
PermissionError: [WinError 5] Отказано в доступе: 'c: \ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '
Durante el manejo de la excepción anterior, se produjo otra excepción:
Rastreo (llamadas recientes más última):
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ basecommand.py", línea 122, en main
write_debug_log = check_path_owner (debug_log_path)
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ commands \ install.py", línea 283, en ejecución
build_delete = (no (options.no_clean u options.build_dir))
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", línea 1443, en instalación
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", línea 610, en commit_uninstall
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespipreq.py", línea 1860, en confirmación
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ util.py", línea 43, en rmtree
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 478, en rmtree
return _rmtree_unsafe (ruta, un error)
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 368, en _rmtree_unsafe
_rmtree_unsafe (nombre completo, un error)
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 368, en _rmtree_unsafe
_rmtree_unsafe (nombre completo, un error)
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 368, en _rmtree_unsafe
_rmtree_unsafe (nombre completo, un error)
Archivo "C: \ Python \ 3.3-32 \ lib \ shutil.py", línea 373, en _rmtree_unsafe
onerror (os.unlink, nombre completo, sys.exc_info ())
Archivo "C: \ Python \ 3.3-32 \ lib \ site-packagespip \ util.py", línea 62, en rmtree_errorhandler
PermissionError: [WinError 5] Отказано в доступе: 'c: \ users \ bialix \ appdata \ local \ temppip-6i_i7a-uninstallpython \ 3.3-32 \ scripts \ p
ip.exe '
¿Algún cambio en este tema?
No se puede arreglar en ningún sentido práctico (al menos, alguien necesitaría proporcionar un parche completo y funcional para la evaluación si pensara que lo era, ya que nadie ha descubierto todavía una manera de solucionarlo, es esencialmente una limitación de Windows).
La forma correcta de actualizar pip en Windows es python -m pip install -U pip
.
@pfmoore ¿Qué pasa con 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 Suspiro. Odio tener que pensar en Python 2.6 :-)
Si mal no recuerdo, python -m pip.__main__
trabaja allí. No tengo una copia de Python 2.6 a mano para probarlo en este momento, lo siento ...
Acabo de probar en Python 2.6, y python -m pip.__main__
sí funciona allí.
¡Hola!
python -m pip install -U pip
no me funciona (w7, powershell, python instalado a través de chocolatey); la instalación falla con problemas de permisos:
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'
Pensamientos
No hay forma de que nadie tenga ese archivo bloqueado, o que usted no tenga permiso para eliminarlo. ¿Podría ser un problema de chocolate? ¿Puede eliminar ese archivo manualmente desde un símbolo del sistema?
@AmazingHorse has probado
curl -k https://bootstrap.pypa.io/get-pip.py | python
asumiendo que tienes cURL ?
Interesante, @pfmoore , ese archivo está bloqueado incluso en un símbolo del sistema de administrador.
Entonces, suena como un problema de permisos de Windows en lugar de algo con pip.
¿Tiene que ver con el hecho de que mi Python se instaló fuera de la estructura de directorios de Windows en C:?
Estaré buscando en Google, pero tengo curiosidad por saber si alguien puede publicar aquí por qué creen que podría ser causado.
Animo amigos
@AmazingHorse Honestamente, no tengo idea. La otra posibilidad es que puede ser que haya algo en particular acerca de cómo Chocolatey instala Python; tal vez informe el problema en su rastreador (¿supongo que tienen uno?) Y vea lo que dicen.
Pero sí, no es un problema de pip por el sonido.
Windows permite cambiar el nombre / mover archivos asignados en memoria (asignados como imagen o datos) a un nuevo nombre en el mismo volumen. Entonces, el controlador de errores rmtree
puede intentar cambiar el nombre del archivo para moverlo al directorio temporal base. Al menos allí no interferirá con la eliminación del directorio. Esta solución alternativa falla si el archivo está en un volumen diferente al del directorio temporal, o por una infracción de uso compartido, o si la ACL del archivo impide la operación. Pero ninguno de esos debería aplicarse en este caso.
Si el grupo de administradores está habilitado en el token de proceso, el archivo renombrado se puede programar para su eliminación cuando el sistema se reinicia. Simplemente use ctypes para llamar a MoveFileExW(path, None, MOVEFILE_DELAY_UNTIL_REBOOT)
. Sin embargo, esto falla para los usuarios habituales porque no se les permite modificar el valor de registro PendingFileRenameOperations
del administrador de sesiones.
pip en Windows 7/10 funciona bien excepto para la actualización> pip install --upgrade pip
Intento cargar lo menos posible en mi C: \ (SSD) e instalar el software en el árbol comenzando en D: \ NUC \
Esto es lo que estoy viendo:
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'
La ruta de la carpeta AppData está disponible en mi unidad D :, preguntándome cuál es la mejor manera de manejar esta situación para las herramientas y el uso posteriores. Pensé en un cruce, pero todavía parecerá un camino diferente. ¿Tal vez escriba las diferencias de la ubicación esperada a la ubicación real para verificar la ruta correcta? Antes de hacer esto, pip instaló bien django (pero se quejó de la versión que condujo a este descubrimiento). hmmm ... y ahora pip parece roto.
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>
tienes que hacer python.exe -m pip install --upgrade pip
En Python 2.6 necesitas ejecutar python -m pip.__main__ install -U pip
Considero que la situación actual es realmente mala para los nuevos usuarios de Python, así como para los antiguos usuarios de Python como yo, que normalmente no usan Windows. Sin embargo, estoy perfectamente bien usando python -m pip install --upgrade pip
, pero realmente creo que pip install --upgrade pip
debería recomendarlo automáticamente en Windows. @dstufft ya propuso esto en 2013. ¿Hay alguna buena razón para no hacerlo?
PD: Lo siento por informar # 3462 como un duplicado de este problema. No encontré este problema buscando en el rastreador WindowsError
. Con suerte, después de este comentario, otros lo harán en el futuro.
Hasta donde yo sé, ya es el comando que pip sugiere al usuario cuando detecta una nueva versión de sí mismo. La situación no es tan mala.
@pekkaklarck La principal razón para no hacerlo es que es muy difícil de detectar. Para empezar, no sé cómo detectar de manera confiable que pip se está ejecutando desde pip.exe
lugar de python -m pip
. E incluso si detecta eso, debe verificar si pip
está en las cosas que se están instalando (considere pip install --upgrade -r http://some.remote/requirements.txt
; para cuando haya leído el archivo de requisitos, posiblemente sea demasiado tarde para emitir el mensaje).
Por supuesto, algo que no es 100% perfecto es algo completamente razonable de implementar: asegurarse de no objetar usos completamente válidos, en lugar de asegurarnos de detectar todos los casos de esquina, eso es realmente importante.
Ciertamente consideraríamos fusionar un PR para abordar este problema, pero no creo que ninguno de los desarrolladores principales de pip encuentre el problema lo suficientemente problemático como para intentar solucionarlo ellos mismos (probablemente soy el usuario de Windows más pesado entre los desarrolladores principales, y Encuentro que recordar usar python -m pip
razonablemente fácil).
para determinar si somos pip[.exe]
o no, imagino
"pip" in os.path.basename(sys.argv[0])
funcionaría bien. Además, solo una advertencia de ver [-U|--upgrade]
y pip
en la invocación probablemente sería suficiente para corregir el 90% de las invocaciones.
@stonebig : ¿Podría aclarar cuándo se recomienda ese comando? Intenté pip install -U pip
después de una nueva instalación de Python 2.7.11 y falló con este error:
WindowsError: [Error 5] Acceso denegado: 'c: \ users \ koulutus \ appdata \ local \ temppip-65z4kx-uninstallpython27 \ scriptspip.exe'
@pfmoore : La actualización de pip en el archivo de requisitos suena bastante rara y probablemente podría ignorarse. Como @Ivoz , pensé que pip.exe
estaría en sys.argv
. Alternativamente, debería ser posible atrapar el WindowsError
y reaccionar a eso.
@Ivoz, ¿eso funciona? Pensé que el contenedor pip.exe invocaba a Python como un subproceso, por lo que no funcionaría. Pero una prueba rápida (imprimiendo sys.argv[0]
en pip.main()
) muestra:
>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:
Entonces funciona, pero debe tener cuidado de cómo detecta pip
en sys.argv[0]
(tenga en cuenta que el primer ejemplo incluye el directorio pip
en la ruta de __main__.py
)
Gracias por señalar esto. Aprendí algo hoy :-)
@pekkaklarck El problema con la captura del WindowsError
(si mal no recuerdo) es que ocurre bastante tarde y la instalación es parcialmente completa (y no es fácil de revertir).
Pero no quiero disuadir a nadie de que intente solucionar este problema, así que lo dejaré así :-)
pero debes tener cuidado al detectar pip en sys.argv [0]
@pfmoore de ahí la llamada a os.path.basename
.
@Ivoz Suspiro. Demasiado tarde por la noche aquí. Si obviamente :-)
@pekkaklarck . por ejemplo al hacer pip list
(en Windows). Por lo que recuerdo en las discusiones del año pasado:
Podría haber una mejor solución, pero supongo que ya es el 80% de una respuesta perfecta de la situación anterior.
Quizás una mejor solución sería tener un "upgrade_pip.bat" entregado con la instalación de Windows por defecto de Python, no ajustado a "pip", y eso haría ese comando. (o pip_update.bat
para que coincida mejor con conda?)
Hice esto hoy mientras me sumergía en la nueva experiencia de usuario de Windows Python. Fue terrible.
¿Podemos hacer que -m
automático para ese comando? (¿quizás darle a la actualización de pip su propio comando?)
Ningún usuario debería tener que ver esto, especialmente después de ejecutar exactamente el comando _pip les dijo que ejecutaran_.
Creo que ya tenemos la configuración de registro en versiones más recientes de pip que 7.0.1 para decirles a los usuarios de Windows que usen python -m pip install --upgrade pip
lugar de pip install --upgrade pip
.
: destellos:: pastel:: destellos:
Sí, desde 7.1 cf # 2830
\ O /
No puedo mejorar mi pip en win 10, ¿qué pasa?
@grasx
Si realmente quieres saber qué pasa, lee este hilo. Si solo está interesado en que esto funcione, lea la última línea del resultado que obtuvo y compárela con lo que ejecutó.
@ piotr-dobrogost
¿Lo es? La última línea roja parece apuntar a un problema de decodificación, más bien al error de acceso denegado que es el resultado habitual de una actualización en Windows. ¿ Podría el problema de
Dudo que el problema que haya encontrado
@nmusatti
Tienes razón. Culpa mía.
@ piotr-dobrogost @nmusatti @pekkaklarck Sin embargo, gracias, cambié el nombre de usuario, por lo que ahora solo contiene caracteres ASCII y pip actualizado con éxito a 8.1
@grasx cambió el nombre de usuario? Estoy confundido con lo que dijiste ... Tuve el mismo problema, algo diferente es que estaba en Windows 7
idea aleatoria, ¿qué tal no reemplazar el archivo exe si no es necesario?
por lo que tengo entendido, los archivos exe son trampolines muy pequeños que normalmente funcionan
la lógica más importante está en los archivos de script adjuntos
@ pzz2011 Bueno, en realidad reinstalé mi win y establecí un nuevo nombre de usuario. En mi caso fue más fácil que averiguar cómo cambiarlo en todos los lugares y rutas donde se menciona :)
@RonnyPfannschmidt Depende de lo que se use para escribir el .exe: las herramientas de configuración utilizadas para usar foo.exe
+ foo-script.py
(no estoy seguro de lo que hace ahora), mientras que distlib (si está configurado así) crea un solo foo.exe
que incorpora el script.
@grasx hhh ... Encontré una manera más fácil de resolverlo. Acabo de reinstalar Python de 2.7.xa 2.7.10.
Entonces el éxito me sonríe ~
En Windows, use las ventanas del símbolo del sistema en modo Administrador. Luego escribe comando
python -m pip install - actualizar pip
Espero que te funcione. Así es como lo hice funcionar en Windows 10
Buena suerte.
@grasx No estoy del todo seguro de por qué, pero ese error aparece al seleccionar "instalar para todos los usuarios" en el instalador de Python en Windows 8.1 y 10. Realice una reinstalación, seleccione PATH e instalación personalizada. Asegúrese de que la casilla superior no esté marcada y seleccione la ubicación de instalación. Usar "python -m pip install --upgrade pip" en cmd funciona bien después de eso.
Solo un FYI, para usuarios de Windows. Si instala Cygwin, Python2.7 se instala automáticamente. Todo lo que necesita hacer entonces es ejecutar:
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
(Sí, primero debe instalar wget
).
¿Cómo resolver este problema?
@ JingY0604
Consulte Para copiar texto desde una ventana del símbolo del sistema para obtener una explicación sobre cómo copiar texto aquí. De esta forma, se podrá buscar el texto que publiques.
Está utilizando pip versión 7.1.0, sin embargo, la versión 9.0.1 está disponible.
Debería considerar la actualización a través del comando 'python -m pip install --upgrade pip'
y.
D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_vendorrequ
ests \ packages \ urllib3 \ util \ ssl_.py: 90: InsecurePlatformWarning: Un verdadero SSLContex
t objeto no está disponible. Esto evita que urllib3 configure SSL apropiadamente
Ely y puede hacer que algunas conexiones SSL fallen. Para obtener más información, consulte http
ps: //urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InseguroPlataformaAdvertencia
Recogiendo pip
Descargando pip-9.0.1-py2.py3-none-any.whl (1.3MB)
Excepción:
Rastreo (llamadas recientes más última):
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ base
command.py ", línea 223, en main
status = self.run (opciones, argumentos)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ comm
ands \ install.py ", línea 282, en ejecución
requisito_set.prepare_files (buscador)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", línea 334, en prepare_files
functools.partial (self._prepare_file, finder))
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", línea 321, en _walk_req_to_install
more_reqs = controlador (req_to_install)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpipreq \
req_set.py ", línea 491, en _prepare_file
sesión = self.session)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", línea 825, en unpack_url
sesión,
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", línea 673, en unpack_http_url
from_path, content_type = _download_http_url (enlace, sesión, temp_dir)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", línea 886, en _download_http_url
_download_url (resp, enlace, archivo_contenido)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ down
load.py ", línea 621, en _download_url
para fragmento en progreso_indicador (resp_read (4096), 4096):
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip \ util
s \ ui.py ", línea 135, en iter
self.next (n)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress__init __. py ", línea 73, en la siguiente
self.update ()
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ bar.py ", línea 82, en actualización
self.writeln (línea)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ progress \ helpers.py ", línea 69, por escrito
imprimir (línea, fin = '', archivo = self.file)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", línea 133, por escrito
self.write_and_convert (texto)
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", línea 161, en write_and_convert
self.write_plain_text (texto, cursor, len (texto))
Archivo "D: \ Archivos de programa \ Python27 \ lib \ site-packagespip-7.1.0-py2.7.eggpip_ven
dor \ colorama \ ansitowin32.py ", línea 166, en write_plain_text
self.wrapped.write (texto [inicio: fin])
UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u '\ u258f' en la posición 8
: ordinal fuera del rango (128)
@ JingY0604 Ver # 3463.
Puede actualizar su pip desinstalando la instalación existente y usando get-pip.py para instalar la versión más nueva.
Para https://github.com/ofek/hatch , simplemente capturo todas las instancias de actualización y no las permito. Luego tengo una bandera explícita --self para hacer que aparezca un python -m pip install -U hatch
y salga inmediatamente.
https://github.com/ofek/hatch/blob/22e621715fbed36c2bfab35ae9fa9649ea6dfe1e/hatch/cli.py#L509
editar: técnicamente, en lugar de solo python
, sys.executable
se usa en realidad
@ofek # 4490 hizo un cambio en pip, imprimiendo un mensaje mejor, IIRC.
Entonces, por ahora, si instalé Python sin pip, no podré instalar el módulo pip en el futuro.
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
¡Hola @ihormelnyk!
Ese no es el caso. El condicional para esto era demasiado amplio - bloquea el uso de cualquier script con la palabra "pip" para que no modifique pip. Puede intentar cambiar el nombre de get-pip.py para que no contenga la palabra "pip", para solucionar este problema.
Una versión 10.0.1 (que probablemente ocurrirá esta semana) solucionará este problema.
@pradyunsg gracias por compartir el consejo. Tuve el mismo problema que @ihormelnyk y cambiar el nombre del archivo get-pip.py
a un nombre que no contiene la palabra pip
ayudó.
Imprimo pip en cmd en Windows, pero mostró
Error fatal en el iniciador: no se puede crear el proceso usando '"" d: \ archivos de programa (x86) python3.6python.exe "" D: \ Archivos de programa (x86) python3.6 \ Scriptspip.exe "'
Ya configuré el entorno para pip, pero no funciona, ¿cómo resolverlo?
@ BJQ98 Te gustaría mirar el número 5223.
pradyunsg dijo que 10.0.1 arreglaría esto, pero no sé cómo. Gracias.
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.
Será lo mismo que el número 5343.
Gracias pradyunsg, la solución de alguien más resulta ser más simple. Acabo de realizar "python -m pip uninstall pip" primero, luego "python -m pip install -U pip"
Requisito ya actualizado: pip en 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.
Recibo un error al ejecutar el comando anterior como error de sintaxis en la palabra obtener cuál podría ser la solución para esto
@AProNoob Debería ejecutar los comandos en un símbolo del sistema (cmd o powershell), no en un símbolo del sistema de Python.
¡Gracias! ¡Eso funciono!
Este hilo se ha bloqueado automáticamente ya que no ha habido ninguna actividad reciente después de que se cerró. Abra un nuevo problema para errores relacionados.
Comentario más útil
En Windows, use las ventanas del símbolo del sistema en modo Administrador. Luego escribe comando
python -m pip install - actualizar pip
Espero que te funcione. Así es como lo hice funcionar en Windows 10
Buena suerte.