¿Por qué "pip install" dentro de Python genera un SyntaxError?

232

Estoy tratando de usar pip para instalar un paquete. Intento correr pip installdesde el shell de Python, pero obtengo un SyntaxError. ¿Por qué recibo este error? ¿Cómo uso pip para instalar el paquete?

>>> pip install selenium
              ^
SyntaxError: invalid syntax
Nacht
fuente

Respuestas:

298

pip se ejecuta desde la línea de comandos, no desde el intérprete de Python. Es un programa que instala módulos, por lo que puede usarlos desde Python. Una vez que haya instalado el módulo, puede abrir el shell de Python y hacerimport selenium .

El shell de Python no es una línea de comando, es un intérprete interactivo. Escribe código Python en él, no comandos.

Lennart Regebro
fuente
2
Gracias por la aclaración, pero aún no puedo hacer que se ejecute. ¿Dónde está exactamente? Me está dando un error "no se reconoce pip" (porque no soy el directorio correcto). Fue instalado en \ site-packages pero estoy buscando pensó que y no puedo encontrar ninguna PIP.EXE
Nacht
25
@Nacht: pipestará en el directorio de scripts de su instalación de Python, por lo que querrá agregarlo a su ruta. Añadir C:\Python32\scriptsa tu PATH. Cambie la ruta según sea necesario según el lugar donde la instaló.
wkl
3
En realidad, pip.exe en Windows es un script de Python como otros en el directorio / scripts, pero se envuelve en exe para ejecutarlo con el intérprete de Python predeterminado. Al abrir pip.exe con 7-zip, puede ver .py principal importando pip, sys y re modules ... (Y allí encontrará la respuesta sobre cómo ejecutarlo dentro de un shell de python) -> pip es un archivo regular Módulo de Python. No olvides que Windows no era la primera plataforma compatible con Python, Linux sí, y Python es parte del sistema operativo.
Zydnar
1
Sé que tuve que hacer esto desde la línea de comandos (no desde la línea de comandos de Python). Esto fue después de cambiar el directorio a la ubicación de python.exe y luego fue necesario poner el tipo de archivo en pip3. En mi caso, estaba después de las solicitudes de trabajo HTTP. A saber: solicitudes de instalación de python pip3.exe <--- esto funcionó perfectamente, repitió lo mismo para el módulo
pytz
106

Use la línea de comando, no el shell de Python (DOS, PowerShell en Windows).

C:\Program Files\Python2.7\Scripts> pip install XYZ

Si instaló Python en su RUTA utilizando los últimos instaladores, no necesita estar en esa carpeta para ejecutar pip

Terminal en Mac o Linux

$ pip install XYZ
ruxming
fuente
3
Gracias por incluir el C: ...., me ayudó a darme cuenta de dónde necesitaba cd, ya que no puede simplemente abrir la línea de comando y escribir pip.
hammythepig
2
Para su información, la instalación de Python que acabo de hacer NO configuró el PATH. Tuve que hacer esto manualmente, señalando la ruta de instalación en%APPDATA%
UuDdLrLrSs
61

Como @sinoroc sugirió que la forma correcta de instalar un paquete a través de pip es usar un proceso separado, ya que pip puede causar el cierre de un hilo o puede requerir un reinicio del intérprete para cargar el nuevo paquete instalado, por lo que esta es la forma correcta de usar la API: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'SomeProject'])pero ya que Python permite para acceder a la API interna y usted sabe para qué está utilizando la API, de todas formas puede utilizar la API interna, por ejemplo si está creando su propio administrador de paquetes GUI con recursos alternativos como https://www.lfd.uci.edu/~gohlke/pythonlibs/

Seguir a soulution ESTÁ FUERA DE FECHA, en lugar de votar negativamente, sugiera actualizaciones. ver https://github.com/pypa/pip/issues/7498 para referencia.


ACTUALIZACIÓN : desde pip versión 10.x no hay más get_installed_distributions()o mainmétodo bajo import pip uso en su lugar import pip._internal as pip .

ACTUALIZACIÓN ca. v.18 get_installed_distributions() ha sido eliminado. En su lugar, puede usar un generador freezecomo este:

from pip._internal.operations.freeze import freeze

print([package for package in freeze()])

# eg output ['pip==19.0.3']


Si desea utilizar pip dentro del intérprete de Python, intente esto:

import pip

package_names=['selenium', 'requests'] #packages to install
pip.main(['install'] + package_names + ['--upgrade']) 
# --upgrade to install or update existing packages

Si necesita actualizar cada paquete instalado, use lo siguiente:

import pip

for i in pip.get_installed_distributions():
    pip.main(['install', i.key, '--upgrade'])

Si desea detener la instalación de otros paquetes si falla alguna instalación, úsela en una sola pip.main([])llamada:

import pip

package_names = [i.key for i in pip.get_installed_distributions()]
pip.main(['install'] + package_names + ['--upgrade'])

Nota : Cuando instala desde la lista en un archivo con -r/ --requirementparámetro, NO necesita la función open ().

pip.main(['install', '-r', 'filename'])

Advertencia : Algunos parámetros tan simples --helppueden hacer que el intérprete de Python se detenga.

Curiosidad: al usarlo pip.exe, de todas formas, usas el intérprete de Python y el módulo pip. Si desempaqueta pip.exeo, pip3.exeindependientemente de si es python 2.xo 3.x, dentro está el MISMO archivo único __main__.py:

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())
Zydnar
fuente
55
Esto funciona en el shell de Python, por lo que creo que debería ser la respuesta aceptada.
François M.
55
Esto es exactamente lo que esperaba encontrar al buscar en Google este problema.
Andrew Brēza
1
Gran respuesta, y definitivamente debería incluirse aquí, pero no estoy de acuerdo con que debería ser la respuesta aceptada, ya que el usuario claramente estaba tratando de hacer que la ahora ubicua sintaxis "pip install" funcione. Dado que esa sintaxis no funcionará con este método, no resuelve directamente ese problema. Sin embargo, puede ser más útil que la respuesta aceptada :)
Dan
No tengo idea de lo que realmente se entiende por OP, pero esta respuesta fue realmente tardía, por lo que no es importante si se acepta aquí.
Zydnar
@Zydnar, de acuerdo, mi respuesta fue para Francois, quien dijo que esta debería ser la respuesta aceptada. Publiqué mi razonamiento de por qué no. Dicho esto, sigo pensando que esta es una gran publicación.
Dan
53

Para ejecutar pip en Python 3.x, solo siga las instrucciones en la página de Python: Instalación de módulos de Python .

python -m pip install SomePackage

Tenga en cuenta que esto se ejecuta desde la línea de comandos y no desde el shell de Python (el motivo del error de sintaxis en la pregunta original).

Dan
fuente
1
Todavía estoy recibiendo una sintaxis no válida. Estoy usando IPython en una PC con Windows 10. ¿Alguna idea?
DataGirl
Esta página tiene instrucciones para instalar IPython: ipython.readthedocs.io/en/stable/install/index.html $ pip install ipython. Presumiblemente eso se traduciría en $ python -m pip install ipython
Dan
1
Esto no responde nada sobre el error de sintaxis
OneCricketeer
Esto ya estaba cubierto por otras respuestas, pero lo agregué ahora. Mi respuesta fue solo un suplemento para 3.x.
Dan
funcionó para mí en Windows 10 - también me aconsejó actualizar pip según el comentario anterior :)
Kdean571
2

Inicialmente yo también enfrenté este mismo problema, instalé Python y cuando ejecuté el pipcomando solía arrojarme un error como se muestra en la imagen a continuación.

ingrese la descripción de la imagen aquí

Asegúrese de que la ruta de pip se agregue en las variables ambientales. Para mí, la ruta de instalación de python y pip es ::
Python: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\
pip: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts
ambas rutas se agregaron a la ruta en variables ambientales.

Ahora abra una nueva ventana de cmd y escriba pip, debería ver una pantalla como se muestra a continuación.

ingrese la descripción de la imagen aquí

Ahora escribe pip install <<package-name>>. Aquí estoy instalando el paquete spyder para que mi declaración de línea de comando sea como pip install spydery aquí va mi pantalla de ejecución.

ingrese la descripción de la imagen aquí

y espero que hayamos terminado con esto !!

mannedear
fuente
1
Esto no responde la pregunta.
sinoroc
0

debe escribirlo en cmd, no en IDLE. porque IDLE no es un símbolo del sistema si desea instalar algo desde IDLE escriba esto

>>>from pip.__main__ import _main as main
>>>main(#args splitted by space in list example:['install', 'requests'])

Esto está llamando pip como pip <commands>en la terminal. Los comandos estarán separados por espacios en los que esté haciendo allí.

Matthijs990
fuente
Esta es una respuesta desactualizada desde pip versión 10.0. ImportError: cannot import name mainusando pip v19.0.3
Zydnar
-1

Programáticamente, lo siguiente actualmente funciona. Veo todas las respuestas después de 10.0 y todas, pero ninguna de ellas es el camino correcto para mí. Dentro de Kaggle seguro, este apporach funciona

from pip._internal import main as _main

package_names=['pandas'] #packages to install
_main(['install'] + package_names + ['--upgrade']) 
demongolem
fuente
¿Por qué no usar Jusy: desde pip .__ main__ import _main?
Matthijs990
-3

Intente actualizar pip con el siguiente comando y vuelva a intentar

python -m pip install -U pip
Karthik
fuente
una actualización de pip no permitirá que funcione en el shell de Python
Matthijs990