que para paquetes mac librerias instalar entorno crear como python pip

para - que es pip python



Identificar la relaciĆ³n de dependencia para los paquetes de python instalados con pip (7)

Antes que nada, pip freeze muestra todos los paquetes instalados Python, no necesariamente usando PIP.

En segundo lugar, los paquetes de Python contienen la información sobre los paquetes dependientes y las versiones requeridas . Puede ver las dependencias de un paquete particular utilizando los métodos que se describen aquí . Cuando está actualizando un paquete, la secuencia de comandos del instalador, como PIP, gestionará la actualización de las dependencias por usted.

Para resolver la actualización de paquetes, recomiendo usar archivos de requisitos PIP . Puede definir qué paquetes y versiones necesita e instalarlos de una vez con la instalación de pip.

Cuando hago un congelamiento de pip, veo una gran cantidad de paquetes de Python que no instalé explícitamente, por ej.

$ pip freeze Cheetah==2.4.3 GnuPGInterface==0.3.2 Landscape-Client==11.01 M2Crypto==0.20.1 PAM==0.4.2 PIL==1.1.7 PyYAML==3.09 Twisted-Core==10.2.0 Twisted-Web==10.2.0 (etc.)

¿Hay alguna manera para mí para determinar por qué pip instaló estos paquetes dependientes particulares? En otras palabras, ¿cómo determino el paquete principal que tenía estos paquetes como dependencias?

Por ejemplo, es posible que desee utilizar Twisted y no quiero depender de un paquete hasta que sepa más sobre la desinstalación o actualización accidental.


Como dije recientemente en un hilo de hn , recomendaré lo siguiente:

Tenga un archivo de requirements.txt comentado con sus dependencias principales:

## this is needed for whatever reason package1

Instale sus dependencias: pip install -r requirements.txt . Ahora obtienes la lista completa de tus dependencias con pip freeze -r requirements.txt :

## this is needed for whatever reason package1==1.2.3 ## The following requirements were added by pip --freeze: package1-dependency1==1.2.3 package1-dependency1==1.2.3

Esto le permite mantener su estructura de archivos con comentarios, separando sus dependencias de las dependencias de sus dependencias. De esta forma, tendrás un momento mucho mejor el día que necesites eliminar uno de ellos :)

Tenga en cuenta lo siguiente:

  • Puede tener una clean requirements.raw con control de versión para reconstruir su full requirements.txt .
  • Tenga cuidado con las URL git que se reemplazan por nombres de huevo en el proceso.
  • Las dependencias de sus dependencias todavía están ordenadas alfabéticamente, por lo que no sabe directamente cuál de ellas requiere cada paquete, pero en este momento no lo necesita.
  • Use pip install --no-install <package_name> para enumerar requisitos específicos.
  • Use virtualenv si no lo hace.

El comando pip show mostrará qué paquetes son necesarios para el paquete especificado (tenga en cuenta que el paquete especificado ya debe estar instalado):

$ pip show specloud Package: specloud Version: 0.4.4 Requires: nose figleaf pinocchio

pip show fue presentado en la versión 1.4rc5 de pip


Escribí un guión rápido para resolver este problema. La siguiente secuencia de comandos mostrará los paquetes principales (dependientes) para cualquier paquete dado. De esta manera, puede estar seguro de que es seguro actualizar o instalar cualquier paquete en particular. Se puede usar de la siguiente manera: dependants.py PACKAGENAME

#!/usr/bin/python3 # -*- coding: utf-8 -*- """Find dependants of a Python package""" import logging import pip import pkg_resources import sys __program__ = ''dependants.py'' def get_dependants(target_name): for package in pip.get_installed_distributions(): for requirement_package in package.requires(): requirement_name = requirement_package.project_name if requirement_name == target_name: package_name = package.project_name yield package_name # configure logging logging.basicConfig(format=''%(levelname)s: %(message)s'', level=logging.INFO) try: target_name = sys.argv[1] except IndexError: logging.error("missing package name") sys.exit(1) try: pkg_resources.get_distribution(target_name) except pkg_resources.DistributionNotFound: logging.error("''%s'' is not a valid package", target_name) sys.exit(1) print(list(get_dependants(target_name)))


Puede probar pipdeptree que muestra las dependencias como una estructura de árbol, por ejemplo:

$ pipdeptree Lookupy==0.1 wsgiref==0.1.2 argparse==1.2.1 psycopg2==2.5.2 Flask-Script==0.6.6 - Flask [installed: 0.10.1] - Werkzeug [required: >=0.7, installed: 0.9.4] - Jinja2 [required: >=2.4, installed: 2.7.2] - MarkupSafe [installed: 0.18] - itsdangerous [required: >=0.21, installed: 0.23] alembic==0.6.2 - SQLAlchemy [required: >=0.7.3, installed: 0.9.1] - Mako [installed: 0.9.1] - MarkupSafe [required: >=0.9.2, installed: 0.18] ipython==2.0.0 slugify==0.0.1 redis==2.9.1

Para ejecutarlo:

pip install pipdeptree


EDITAR: según lo notado por @Esteban en los comentarios, también puede listar el árbol en reversa con -r o para un solo paquete con -p <package_name> para encontrar qué Werkzeug instalado podría ejecutar:

$ pipdeptree -r -p Werkzeug Werkzeug==0.11.15 - Flask==0.12 [requires: Werkzeug>=0.7]


También puede usar un comando de una línea que canaliza los paquetes en los requisitos para pip show.

cut -d''='' -f1 requirements.txt | xargs pip show


(solución alternativa, no respuesta verdadera)

Tuve el mismo problema, con lxml no instalando y yo queriendo saber quién necesitaba lxml. No es lo que lxml necesitaba . Terminó eludiendo el problema por.

  1. señalando dónde se estaban poniendo los paquetes de mi sitio.

  2. ir allí y grep recursivo para la importación (el último grep --invert-match sirve para eliminar los archivos de lxml de la consideración).

Sí, no una respuesta sobre cómo usar pip para hacerlo, pero no conseguí ningún éxito de las sugerencias aquí, por la razón que sea.

site-packages me$ egrep -i --include=*.py -r -n lxml . | grep import | grep --invert-match /lxml/