Pip bağımlılıklarını / gereksinimlerini listelemenin bir yolu var mı?


Yanıtlar:


95

Kabul edilen yanıt artık pip'in daha güncel sürümleri için geçerli değildir ve birden fazla yorumu incelemeden hemen yanıt vermez, bu nedenle güncellenmiş bir yanıt veriyorum.

Bu, pip sürüm 8.1.2 , 9.0.1 , 10.0.1 ve 18.1 ile test edildi .

Linux'ta mevcut dizininizi karıştırmadan çıktı almak için kullanın

pip download [package] -d /tmp --no-binary :all: -v

-d pip'e indirmenin dosyaları koyması gerektiğini söyler.

Daha iyisi, çıktı olarak yalnızca bağımlılıkları almak için bağımsız değişken paket adı olan bu komut dosyasını kullanın:

#!/bin/sh

PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \
| grep Collecting \
| cut -d' ' -f2 \
| grep -Ev "$PACKAGE(~|=|\!|>|<|$)"

Ayrıca burada mevcuttur .


Bunu kullanmanın çok ( çok ) kaba bir okuması requirements.txt:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
Ian Clark

@ hans-Musgrave sadece satırın sonuna veya geçerli başlamasıyla birlikte paketine uyan satırları hariç tutmak böylece bash komut dosyası güncellendi, daha önce fark etmemiş olduğu başka bir yanıt iyi bir noktaya geldi versiyon belirteci herhangi bir satıra daha ziyade paket adını içerir.
Jmills

2
Bazı paketler yalnızca ikili veri sağlar, bu yüzden --no-binary :all:iyi bir fikir değildir. SDist değil, sadece tekerlek sevk eden bir proje başarısız olur.
wim

3
Bu, çok yavaş olabilen tüm bağımlılık paketlerini indirir ve derler ....
Louis Yang

1
Bunun zaten yüklü olan bağımlılıkları listelemediğini unutmayın (bu, OP için uygundur).
GPHemsley

66

Benim projeme bak johnnydep !

Kurulum:

pip install johnnydep

Kullanım örneği:

$ johnnydep requests
name                       summary
-------------------------  ----------------------------------------------------------------------
requests                   Python HTTP for Humans.
├── certifi>=2017.4.17     Python package for providing Mozilla's CA Bundle.
├── chardet<3.1.0,>=3.0.2  Universal encoding detector for Python 2 and 3
├── idna<2.7,>=2.5         Internationalized Domain Names in Applications (IDNA)
└── urllib3<1.23,>=1.21.1  HTTP library with thread-safe connection pooling, file post, and more.

Daha karmaşık bir ağaç:

$ johnnydep ipython 
name                              summary
--------------------------------  -----------------------------------------------------------------------------
ipython                           IPython: Productive Interactive Computing
├── appnope                       Disable App Nap on OS X 10.9
├── decorator                     Better living through Python with decorators
├── jedi>=0.10                    An autocompletion tool for Python that can be used for text editors.
│   └── parso==0.1.1              A Python Parser
├── pexpect                       Pexpect allows easy control of interactive console applications.
│   └── ptyprocess>=0.5           Run a subprocess in a pseudo terminal
├── pickleshare                   Tiny 'shelve'-like database with concurrency support
├── prompt-toolkit<2.0.0,>=1.0.4  Library for building powerful interactive command lines in Python
│   ├── six>=1.9.0                Python 2 and 3 compatibility utilities
│   └── wcwidth                   Measures number of Terminal column cells of wide-character codes
├── pygments                      Pygments is a syntax highlighting package written in Python.
├── setuptools>=18.5              Easily download, build, install, upgrade, and uninstall Python packages
├── simplegeneric>0.8             Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
└── traitlets>=4.2                Traitlets Python config system
    ├── decorator                 Better living through Python with decorators
    ├── ipython-genutils          Vestigial utilities from IPython
    └── six                       Python 2 and 3 compatibility utilities

Bunu indirdim ve kullandım, harika bir paket. AMA paketlerin kurulmasını gerektirmez mi? OP, özellikle kurulum gerektirmeyen bir yaklaşım talep ediyor. Uyarı için önemli.
so860

5
@ so860 Hayır, paketlerin kurulmasını gerektirmez. Bütün mesele bu, izole bir ortamda çalışıyor.
wim

Açık olmak gerekirse: johnnydepkendini kurmak bağımlılıkları kurar.
GPHemsley

1
@wim: Bu proje tam anlamıyla harika! Sevdim !
Jonathan DEKHTIAR

@JonathanDEKHTIAR nazik sözler için teşekkür ederim :)
wim

17

Sadece ve ancak paket kuruluysa kullanabilirsiniz pip show <package>. Requires:Çıktının sonunda dosyalanmış olanı arayın . Açıkçası, bu ihtiyacınızı ortadan kaldırır ancak yine de yararlı olabilir.

Örneğin:

$ pip --version
pip 7.1.0 [...]
$ pip show pytest
---
Metadata-Version: 2.0
Name: pytest
Version: 2.7.2
Summary: pytest: simple powerful testing with Python
Home-page: http://pytest.org
Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others
Author-email: holger at merlinux.eu
License: MIT license
Location: /home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py

3
Bu sadece doğrudan gereksinimleri gösterir, tüm geçişli bağımlılıklar eksik olacaktır. Ve bir kurulum gerektirir. Yani, soruyu gerçekten cevaplamıyor.
wim

15

Not: Bu yanıt kullanılan özellik oldu 2014 yılında kaldırılmış ve 2015 yılında kaldırıldı . Lütfen modern için geçerli olan diğer cevaplara bakın pip.

Pip ile doğrudan elde edebileceğiniz en yakın --no-installargümanı kullanmaktır :

pip install --no-install <package>

Örneğin, kereviz kurarken çıkan çıktı budur:

Downloading/unpacking celery                                                                                   
  Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded
  Running setup.py egg_info for package celery

    no previously-included directories found matching 'tests/*.pyc'
    no previously-included directories found matching 'docs/*.pyc'
    no previously-included directories found matching 'contrib/*.pyc'
    no previously-included directories found matching 'celery/*.pyc'
    no previously-included directories found matching 'examples/*.pyc'
    no previously-included directories found matching 'bin/*.pyc'
    no previously-included directories found matching 'docs/.build'
    no previously-included directories found matching 'docs/graffles'
    no previously-included directories found matching '.tox/*'
Downloading/unpacking anyjson>=0.3.1 (from celery)
  Downloading anyjson-0.3.3.tar.gz
  Running setup.py egg_info for package anyjson

Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery)
  Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded
  Running setup.py egg_info for package kombu

Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery)
  Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded
  Running setup.py egg_info for package python-dateutil

Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery)
  Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded
  Running setup.py egg_info for package amqplib

Successfully downloaded celery anyjson kombu python-dateutil amqplib

Kuşkusuz, bu, geçici dosyalar biçiminde bir miktar boşluk bırakıyor, ancak hedefe ulaşıyor. Bunu virtualenv ile yapıyorsanız (yapmanız gereken), temizleme <virtualenv root>/builddizini kaldırmak kadar kolaydır .


8
Bunun nedeni, meta verilerin setup.py dışında mevcut olmamasıdır, bu nedenle söyleyin rpmveya dpkgüstte bir meta veri dizini oluşturduğunuzdan pipve pypibunu sorgulayın ve bu şekilde çalışmayın. Bu yüzden her bir gereksinimi yerine getirmemiz gerekiyor.

12
Denedim pip --no-install celeryama hatayı alıyorum no such option: --no-install(pip 1.2.1)
Albay Panic

4
Ne demek düşünüyorumpip install --no-install celery
entropi

23
Benim pip sürümümde (1.5.4) --no-installbayrak kullanımdan kaldırıldı.
Jian

4
1.5.4 için pip install --download = kullanın. - no-use-wheel celery
radtek

-1

Komut pip install <package> --download <path>@radtek yorumlarına belirtildiği gibi, --no-install edilir 7.0.0 (2015-05-21) itibariyle beri kullanılması gerektiğini kaldırıldı dan pip. Bu, gereken bağımlılıkları indirecektir <path>.


10
Gülünç bir şekilde, --downloadkullanımdan kaldırıldı. Kanonik komut artık The Card Cheat tarafından önerildiğipip download <package> -d /tmp --no-binary :all: gibi görünüyor .
Cecil Curry

-1

Başka bir seçenek benzer bir yardımcı komut dosyası kullanmaktır bu bir kullanır pip.req.parse_requirementsayrıştırma için API requirements.txtdosya ve bir distutils.core.setupayrıştırma için yedek setup.pydosyaları.


-1

Bir alıntı @onnovalkering alternatif çözüm :

PyPi, paket meta verileri içeren bir JSON uç noktası sağlar:

>>> import requests
>>> url = 'https://pypi.org/pypi/{}/json'
>>> json = requests.get(url.format('pandas')).json()
>>> json['info']['requires_dist']
['numpy (>=1.9.0)', 'pytz (>=2011k)', 'python-dateutil (>=2.5.0)']
>>> json['info']['requires_python']
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'

Belirli bir paket sürümü için, URL'ye ek bir sürüm segmenti ekleyin:

https://pypi.org/pypi/pandas/0.22.0/json

Ayrıca conda kullanıyorsanız ( @ShpielMeister tarafından önerildiği gibi ) şunları kullanabilirsiniz:

conda info package==X.X.X

belirli bir sürüm için bağımlılıklar dahil olmak üzere bilgileri görüntülemek için veya:

conda info package

bu paketin desteklenen tüm sürümleri hakkındaki bağımlılıklar dahil olmak üzere bilgileri görüntülemek için.


1
Olumsuz oy verdim çünkü bu json uç noktası güvenilir değil. Örnek bir bakış boto3için, require_dist boştur, ancak bu, meta verilerde kesinlikle bağımlılıkları olan bir projedir .
wim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.