pip freeze를 수행하면 명시 적으로 설치하지 않은 많은 Python 패키지가 표시됩니다.
$ 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.)
pip가 이러한 특정 종속 패키지를 설치 한 이유를 확인할 수있는 방법이 있습니까? 즉, 이러한 패키지가있는 상위 패키지를 종속성으로 확인하려면 어떻게해야합니까?
예를 들어, Twisted를 사용하고 실수로 패키지를 제거하거나 업그레이드하지 않는 것에 대해 더 알기 전까지는 패키지에 의존하고 싶지 않습니다.
답변
종속성을 트리 구조로 표시하는 pipdeptree 를 시도 할 수 있습니다 . 예 :
$ 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
그것을 실행하려면 :
pip install pipdeptree
편집 : 의견에 @Esteban이 언급했듯이 Werkzeug가 설치된 것을 찾기 -r
위해 트리를 역으로 또는 단일 패키지로 나열 -p <package_name>
할 수도 있습니다.
$ pipdeptree -r -p Werkzeug
Werkzeug==0.11.15
- Flask==0.12 [requires: Werkzeug>=0.7]
답변
이 pip show
명령은 지정된 패키지에 필요한 패키지를 보여줍니다 (지정된 패키지가 이미 설치되어 있어야합니다).
$ pip show specloud
Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio
pip show
pip 버전 1.4rc5에서 도입되었습니다
답변
최근에 hn thread 에서 말했듯 이 다음을 권장합니다.
requirements.txt
주요 종속성 이있는 주석이 달린 파일이 있습니다.
## this is needed for whatever reason
package1
종속성을 설치하십시오 pip install -r requirements.txt
.. 이제 다음을 사용하여 종속성의 전체 목록을 얻습니다 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
이를 통해 주석으로 파일 구조를 유지할 수 있으며 종속성의 종속성과 종속성을 멋지게 분리 할 수 있습니다. 이렇게하면 하루 중 하나를 제거 해야하는 시간이 훨씬 더 좋습니다. 🙂
다음에 유의하십시오.
- 당신은 청소 할 수 있습니다
requirements.raw
전체를 재건 버전 제어를requirements.txt
. - 이 과정에서 자식 URL로 대체되는 자식 URL에주의하십시오.
- 종속성의 종속성은 여전히 알파벳순으로 정렬되어 있으므로 어떤 패키지에 어떤 패키지가 필요한지 직접 알지 못하지만이 시점에서는 실제로 필요하지 않습니다.
pip install --no-install <package_name>
특정 요구 사항을 나열하는 데 사용 합니다.- 그렇지 않은 경우 virtualenv를 사용하십시오 .
답변
요구 사항의 패키지를 pip show로 파이프하는 한 줄 명령을 사용할 수도 있습니다.
cut -d'=' -f1 requirements.txt | xargs pip show
답변
우선 pip freeze
PIP를 사용하지 않아도 현재 설치된 모든 패키지 Python을 표시합니다.
두 번째로 파이썬 패키지에는 종속 패키지와 필수 버전에 대한 정보가 들어 있습니다 . 여기에 설명 된 방법을 사용하여 특정 pkg의 종속성을 볼 수 있습니다 . 패키지를 업그레이드 할 때 PIP와 같은 설치 프로그램 스크립트가 종속성 업그레이드를 처리합니다.
패키지 업데이 트를 해결하려면 PIP 요구 사항 파일을 사용하는 것이 좋습니다 . 필요한 패키지와 버전을 정의하고 pip install을 사용하여 한 번에 설치할 수 있습니다.
답변
pipupgrade를 사용하십시오 !
$ pip install pipupgrade
$ pipupgrade --format tree --all --check
pipupgrade 는 종속성 그래프를 표시하고 의미 업데이트 버전에 따라 가능한 업데이트를 위해 각 패키지를 강조 표시합니다. 또한 충돌하는 하위 종속성을 예쁜 방식으로 표시합니다. pipupgrade
또한 여러 Python 환경에 존재하는 패키지를 업그레이드합니다. Python2.7 +, Python3.4 + 및 pip9 +, pip10 +, pip18 +, pip19 +와 호환됩니다.
답변
(해결 방법, 실제 답변이 아님)
lxml이 설치되지 않고 lxml이 필요한 사람을 알고 싶어하는 것과 동일한 문제가 있습니다. lxml이 필요한 사람이 아닙니다 . 에 의해 문제를 우회했습니다.
-
내 사이트 패키지를 어디에 넣었는지 주목하십시오.
-
가져 오기를 위해 재귀 grep으로 이동하십시오 (마지막 grep의 –invert-match는 lxml의 자체 파일을 고려하지 못하게합니다).
예, pip를 사용하여 수행하는 방법에 대한 대답은 아니지만 어떤 이유로 든 여기 제안에서 성공하지 못했습니다.
site-packages me$ egrep -i --include=*.py -r -n lxml . | grep import | grep --invert-match /lxml/