Respuestas:
Debe usar pip
el list
comando con grep, que solo enumera los paquetes instalados (no todos los módulos y sus vecinos también):
pip list | grep -F package_name
Si package_name coincide con varios paquetes instalados, por ejemplo, buscar boto
cuándo botocore
también está instalado, usar en -w
lugar de -F
puede ayudar, como sugiere @TaraPrasadGurung. Esto no enumera el paquete exacto, ya que -w
ve los caracteres comunes en los nombres de paquetes como límites de palabras. Entonces, si tiene requests
e requests-cache
instaló o ruamel.yaml
y ruamel.yaml.cmd` y necesita exactamente una línea de salida , debe hacer algo como:
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
Tenga en cuenta que, dado que .
coincide con cualquier carácter al usarlo -E
, debe escapar de él.
¹ Y sí, eso es necesario ya que hay un paquete ruamel_yaml
. No todos los gestores de paquetes son pip
compatibles cuando se trata de paquetes de espacios de nombres.
-w
como límites de palabras y son comunes en los nombres de paquetes. Recibo múltiples coincidencias cuando uso su sugerencia usando grep -w ruamel.yaml
ogrep -w request
pip list | grep -F mxnet-cu101
imprime mxnet-cu101 1.5.0
, pero no exactamente dónde está instalado. alguna idea de cómo obtener la ruta instalada? `
He encontrado respuestas existentes incompletas y que carecen de ejemplos suficientemente buenos. Aquí está la solución que he decidido:
# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
echo 'pandas found'
else
echo 'pandas not found'
fi
Puede encontrar una idea general de Github de este ejemplo aquí: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6
También puede usar algo como esto en sus scripts.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
Lo que obtendría cuando un paquete no está instalado.
Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1
Lo que obtendría cuando se instala un paquete.
Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0
Funciona en python2 y python3, y luego se instala según el código de salida.
Usé una versión un poco más estricta de la respuesta de Anthon, para usar en un script:
pip3 list |
grep -v "^Package *Version$" | grep -v "^-*$" |
cut -d ' ' -f 1 |
grep -xF "$package_name"
Los primeros dos greps están destinados a quitar las líneas de encabezado de la salida de pip3.
El corte luego selecciona solo los nombres de los paquetes (descartando los números de versión).
Luego, el grep final puede realizar una búsqueda exacta del $package_name
Si se encuentra el paquete, mostrará el nombre del paquete y regresará con el código de salida 0. Si no desea ver el nombre del paquete, finalice el comando con >/dev/null
en un shell / prompt de Python. :
>>> help('modules')
Probado con pip3:
$> pip3 show MODULENAME
El código de salida ($?) Sería "0" en caso de que el módulo esté instalado, de lo contrario, "1".
Grepping tiene el problema de los "falsos positivos": la salida de un
pip list | grep NAME
coincidiría en cualquier módulo cuyo nombre contenga "NAME", por ejemplo, también coincida con "some_other_NAME".
Mientras
pip3 show MODULENAME
solo partidos en partidos completos.
pip install
. Si ya está instalado, no lo volverá a instalar.