easy_install 또는 pip로 설치된 모든 Python PyPI 패키지를 찾는 방법이 있습니까? 배포판 도구 (이 경우 abian-get on Debian)와 함께 설치 / 설치된 모든 것을 제외합니다.
easy_install 또는 pip로 설치된 모든 Python PyPI 패키지를 찾는 방법이 있습니까? 배포판 도구 (이 경우 abian-get on Debian)와 함께 설치 / 설치된 모든 것을 제외합니다.
답변:
pip freeze
설치된 패키지 및 해당 버전의 목록을 출력합니다. 또한 나중에 새 환경을 설정하는 데 사용할 수있는 파일에 해당 패키지를 작성할 수 있습니다.
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
및 pip list
목록의 모든 것을. 에 의해 설치되지 않은 패키지는 제외하지 않습니다 pip
.
pip freeze
스크립트에서 신뢰할 수있는 반면 pip list
파이프와 함께 사용하면 예기치 않은 오류가 발생합니다.
pip 1.3 버전부터 사용할 수 있습니다 pip list
오래된 패키지를 표시하는 기능을 포함하여 유용한 옵션이 있습니다. https://pip.pypa.io/en/latest/reference/pip_list/ 설명서는 다음과 같습니다.
pip freeze
pip list --user
사용자가 설치 한 패키지 만 표시하고 시스템 전체 패키지는 제외합니다.
데비안이 pip install
기본 대상 과 관련하여 최근 우분투 버전처럼 동작한다면 , ( 기본 대상) /usr/local/lib/
대신 설치됩니다 . /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747을 확인 하십시오./usr/lib
apt
나는 ArchLinux 사용자이고 pip를 실험 하면서이 같은 문제를 만났다. 아치에서 해결 한 방법은 다음과 같습니다.
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'
여기서 핵심은 /usr/lib/python2.7/site-packages
pip가 YMMV에 설치하는 디렉토리입니다. pacman -Qo
얼마나 아치의 PAC의 케이지 남자 파일의 소유권에 대한 어른 확인합니다. No package
패키지가 파일을 소유하지 않은 경우 제공하는 리턴의 일부입니다 error: No package owns $FILENAME
. 까다로운 해결 방법 : 디렉토리에 관해서는 조금 무지 __init__.py
하기 때문에 쿼리하고 있습니다.pacman -Qo
다른 배포판을 위해 pip
설치하려면 물건 설치 위치 ( sudo pip install
무언가), 파일 소유권을 쿼리하는 방법 (Debian / Ubuntu 방법은 dpkg -S
) 및 "패키지가 해당 경로를 소유하지 않습니다"가 무엇인지 반환해야합니다 (Debian / 우분투는 no path found matching pattern
)입니다. 데비안 / 우분투 사용자는주의하십시오 : dpkg -S
심볼릭 링크를 제공하면 실패합니다. 를 사용하여 먼저 해결하십시오 realpath
. 이처럼 :
find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'
Fedora 사용자는 @eddygeek 덕분에 시도해 볼 수 있습니다.
find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
dpkg
stderr에 오류를 쓰므로 redirect를 추가해야합니다 2>&1
. 국제 출력의 경우 LANG=
앞에 추가하십시오 xargs dpkg -s
. 과 sed
) 경로의 패키지 이름을 유지하기 위해, 또한 좋은 도구입니다. 그래서 나는 다음과 같이 끝납니다 :find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
로 시작 :
$ pip list
모든 패키지를 나열합니다. 원하는 패키지를 찾았 으면 다음을 사용하십시오.
$ pip show <package-name>
폴더를 포함하여이 패키지에 대한 세부 정보가 표시됩니다. 패키지 이름을 이미 알고 있다면 첫 번째 부분을 건너 뛸 수 있습니다
클릭 여기에 핍 쇼에 대한 자세한 내용과 여기에 핍 목록에 대한 자세한 내용은.
예:
$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel
pip.get_installed_distributions()
설치된 패키지 목록을 제공합니다
import pip
from os.path import join
for package in pip.get_installed_distributions():
print(package.location) # you can exclude packages that's in /usr/XXX
print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package
아래는 약간 느리지 만 잘 알려진 형식의 패키지 목록을 제공합니다 pip
. 다시 말해서, 그들 모두가 "pip"에 의해 설치되는 것은 아니지만, 모든 pip에 의해 업그레이드 될 수 있어야합니다.
$ pip search . | egrep -B1 'INSTALLED|LATEST'
속도가 느린 이유는 전체 pypi 저장소의 내용을 나열하기 때문입니다. 비슷한 기능을 제공하지만보다 효율적으로 제안 하는 티켓을 제출했습니다 pip list
.
샘플 출력 : (모두에 대해 '.'대신 서브 세트로 검색을 제한했습니다.)
$ pip search selenium | egrep -B1 'INSTALLED|LATEST'
selenium - Python bindings for Selenium
INSTALLED: 2.24.0
LATEST: 2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
INSTALLED: 1.0.1 (latest)
$
@Paul Woolcock의 답변에 추가하면,
pip freeze > requirements.txt
현재 위치의 활성 환경에 설치된 버전 번호와 함께 설치된 모든 패키지 가 포함 된 요구 사항 파일 이 작성 됩니다. 달리는
pip install -r requirements.txt
요구 사항 파일에 지정된 패키지를 설치합니다.
최신 버전의 pip에는 pip list -l
또는 pip freeze -l
( --list
) 를 통해 OP가 원하는 것을 수행 할 수 있습니다.
데비안에서는 (적어도) 매뉴얼 페이지는 이것을 명확하게하지 않으며, 기능이 있어야한다는 가정하에-pip list --help
.
이 기능이 문서 나 기존 답변에서 명확하지 않다고 제안하는 최근 의견이 있습니다 (일부에서 암시되었지만). 게시해야한다고 생각했습니다. 나는 의견으로 그렇게하고 싶었지만 평판 포인트는 없습니다.
pip freeze --local
8 년 동안있었습니다.pip list --local
OP도 문제는 가상 환경 ( --local
지원)이 아니라 패키지에서 배포 패키지를 식별하는 것에 관한 것 sudo pip install
입니다.
컴퓨터에 여러 버전의 Python이 설치되어 있으면 각 버전과 관련된 몇 가지 pip 버전이있을 수 있습니다.
연결에 따라 사용하는 pip 명령에 매우 신중해야 할 수도 있습니다.
pip3 list
Python3.4를 실행하는 곳에서 나를 위해 일했습니다. 단순히를 사용 pip list
하여 오류 를 반환했습니다 The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.
@almenon이 지적했듯이 더 이상 작동하지 않으며 코드에서 패키지 정보를 얻는 지원되는 방법이 아닙니다. 다음은 예외를 발생시킵니다.
import pip
installed_packages = dict([(package.project_name, package.version)
for package in pip.get_installed_distributions()])
이를 위해를 가져올 수 있습니다 pkg_resources
. 예를 들면 다음과 같습니다.
import pkg_resources
installed_packages = dict([(package.project_name, package.version)
for package in pkg_resources.working_set])
나는 v3.6.5
모든 파일 / 폴더 이름을 가져 site-packages/
오고 (있는 dist-packages/
경우) 패키지 관리자를 사용하여 패키지를 통해 설치된 이름을 제거하십시오.
pip freeze는 pip / easy_install이 아니더라도 설치된 모든 패키지를 나열합니다. CentOs / Redhat에서 rpm을 통해 설치된 패키지가 있습니다.
당신이 사용하는 경우 아나콘다 파이썬 분포를, 당신이 사용할 수있는 conda list
어떤 방법으로 설치 한 것을보고 명령을 :
user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name Version Build Channel
_ipyw_jlab_nb_ext_conf 0.1.0 py36h2fc01ae_0
alabaster 0.7.10 py36h174008c_0
amqp 2.2.2 <pip>
anaconda 5.1.0 py36_2
anaconda-client 1.6.9 py36_0
설치 한 항목 pip
( pip
자체 포함) 을 가져 오려면 :
user@pc:~ $ conda list | grep \<pip
amqp 2.2.2 <pip>
astroid 1.6.2 <pip>
billiard 3.5.0.3 <pip>
blinker 1.4 <pip>
ez-setup 0.9 <pip>
feedgenerator 1.9 <pip>
물론 첫 번째 열만 선택하고 싶을 수도 있습니다 ( pip
필요한 경우 제외 ).
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp
astroid
billiard
blinker
ez-setup
feedgenerator
마지막으로 다음 값을 사용하여이 값을 가져 와서 pip를 모두 제거 할 수 있습니다.
user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y
삭제 확인을하지 않으 려면에 -y
플래그를 사용하십시오 pip uninstall
.
적어도 우분투 (어쩌면 다른 사람들도) 가이 작업을 수행합니다 ( 이 스레드 의 이전 게시물 에서 영감을 얻음 ).
printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo