로컬로 설치된 Python 모듈 목록을 어떻게 얻을 수 있습니까?


995

파이썬 설치 (UNIX 서버)에있는 파이썬 모듈 목록을 얻고 싶습니다.

컴퓨터에 파이썬 모듈 목록을 어떻게 얻을 수 있습니까?


77
>>> help () 그리고 >>> 모듈을 할 수 있습니다
Julius Naeumann

1
대안이 있습니까? help ()가 나를 위해 달려 있습니다.
Paulo Carvalho

2
이 답변 중 많은 부분이 명령 행에 액세스 할 수 있다고 가정합니다. AWS Lambda를 사용하는 경우 Python 내부에서 모두 수행해야합니다. 참조 stackoverflow.com/a/54939905/117471
브루노 Bronosky

답변:


610

해결책

pip> 10.0과 함께 사용하지 마십시오!

pip freeze파이썬 스크립트에서 비슷한 목록 을 얻는 것에 대한 50 센트 :

import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

(너무 긴) 한 라이너로 :

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

기부:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
 'werkzeug==0.9.4']

범위

이 솔루션은 시스템 범위 또는 가상 환경 범위에 적용되며 setuptools, pip및 ( god forbid )에 의해 설치된 패키지를 포함합니다 easy_install.

내 유스 케이스

이 호출 결과를 플라스크 서버에 추가 했으므로 호출 http://example.com/exampleServer/environment하면 서버의 virtualenv에 설치된 패키지 목록이 표시됩니다. 디버깅이 훨씬 쉬워집니다.

경고

파이썬 인터프리터가 setup.py파일 과 같은 디렉토리에서 호출 될 때이 기술의 이상한 동작을 발견 했습니다 setup.py.

재현 단계 :

가상 환경 만들기
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
git repo를 복제 setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

우리는 다음과 같이 행동 setup.py했습니다 /tmp/behave.

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
git repo에서 파이썬 패키지 설치
(test_env) $ cd /tmp/behave && pip install . 
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

위에서 언급 한 솔루션을 실행하면 /tmp

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

위에서 언급 한 솔루션을 실행하면 /tmp/behave

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

behave==1.2.5a1작업 디렉토리가 포함되어 있기 때문에, 두 번째 예제에서 누락 behavesetup.py파일을.

설명서에서이 문제에 대한 참조를 찾을 수 없습니다. 아마도 나는 그것에 대한 버그를 열 것이다.


5
이 답변에 감사드립니다! "로컬로"설치된 Python 모듈을 요청하기 때문에 질문에 더 잘 대답한다고 생각합니다. 핍 동결도 항상가는 방법은 아닙니다. 이것은 더 잘 작동합니다.
Léo Léopold Hertz 준영

3
@Masi이 솔루션의 경고에 대한 자세한 설명을 추가했습니다. 실제로 이상한 것입니다.
Adam Matan

21
대안 :import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen

14
핍 10 현재이 답변은 더 이상 작동하지 않습니다. @ebolyen의 주석은 작동하는 대체 명령을 보여줍니다. 나는 같은 결론에 도달하고 아래에 완전한 개정 코드를 게시했습니다.
Big_Al_Tx

5
최근 버전의 pip에서는 작동하지 않아 오류 메시지가 표시 AttributeError: module 'pip' has no attribute 'get_installed_distributions'됩니다.
HelloGoodbye

1038
help('modules')

파이썬 쉘 / 프롬프트에서.


10
@ dF가 pydoc modules작동합니다. 답변으로 제출해야합니다.
Abizern

37
나에게 잘못을 주었다!
zanbri

3
nobar, zanbri, @Joe Frambach : 우분투에서? 여기에 설명 된 버그가 있습니다 : bugs.launchpad.net/ubuntu/+source/python2.7/+bug/896836
ChristopheD

2
모듈이 설치된 위치와 현재 버전에 대한 추가 정보를 얻으려면 어떻게해야합니까?
호기심

5
python -c 'help("modules")'
kenorb

285

이제,이 방법들을 직접 시도해 보았고 광고 된 내용을 정확히 얻었습니다 : 모든 모듈.

아아, 실제로 stdlib에 대해별로 신경 쓰지 않고 파이썬 설치로 얻는 것을 알고 있습니다.

정말, 나는 그 물건을 원하는 내가 설치.

놀랍게도 실제로 잘 작동 한 것은 다음과 같습니다.

pip freeze

어느 것이 반환 :

Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21

패키지 설치 도구가 '동결'이라는 이름은 아니지만 파이썬 패키징이 이상하기는하지만이 기능을 찾을 수있는 정확한 장소이기 때문에 "놀랍게도"라고 말합니다. 핍 0.8.2, 파이썬 2.7.


4
이름 뒤에 숨겨져있는 아이디어는 지금 설치되어있는 것의 "고정 된"스냅 샷을 얻는다는 것입니다. 나중에 다른 환경에 정확히 동일한 모듈을 설치하기 위해 pip로 피드백 할 수 있습니다.
라이언 C. 톰슨

갑자기 Windows에도 pip를 설치할 수 있습니다! 먼저 setuptools를 설치 한 다음 easy_install을 사용하여 pip를 설치하십시오.
gawbul

이것은 훌륭하지만 내가 설치 한 라이브러리 중 일부를 놓친 것 같습니다. 예를 들어 PyQt를 나열하지 않습니다.
Junuxx

8
pip 1.3부터 list 명령이 있습니다.
Piotr Dobrogost

효과가있다. 혼란스러운 파이썬은 무엇입니까? Rails에 존재하는 것과 유사한 솔루션을 만들 수없는 이유는 무엇입니까? (Gemfile, bundler, rvm)
Dimitris

106

pip 버전 1.3부터 ​​다음에 액세스 할 수 있습니다.

pip list

"pip freeze"의 구문 설탕 인 것 같습니다. 설치 또는 virtualenv와 관련된 모든 모듈과 버전 번호가 나열됩니다. 불행히도 현재 모듈의 버전 번호를 표시하지 않으며 설거지를하거나 신발을 닦지 않습니다.


4
여기 에서 논의 된 것과 글로벌 사이트 패키지 pip list --local를 구별하기위한 것도 있습니다 . virtualenv
Ioannis Filippidis

1
지금까지 최고입니다. 또한 버전을 검색합니다.
aerijman

pip list가장 간단하고 최고입니다. 옵션과 세부 사항은 다음과 같습니다 .
레위 바글 리

86
  • 에서 ipython당신 "입력 할 수 있습니다 importTab."

  • 표준 Python 인터프리터에서 " help('modules')"를 입력 할 수 있습니다 .

  • 명령 행에서을 사용할 수 있습니다 .pydoc modules

  • 스크립트에서을 호출하십시오 pkgutil.iter_modules().


5
pkgutil.iter_modules()위의 pip 솔루션은 모든 패키지가 아니라 pip를 통해 설치된 패키지를 나열합니다.
metaperture

2
대박! 질문이 제기 된 이후로 문서가 향상되었다고 생각합니다. pydoc 모듈 스팸 은 모듈 문서에서 스팸을 검색합니다. 마지막 요점은 모듈을 사용하기에 충분한 정보를 제공하는 것 같습니다. @metaperture pkgutil.iter_modules ()에 의해 설치된 모든 로컬 모듈 (도움말 ( 'modules')에 의한 대규모 stlib 목록 아님)을 나열하는 방법을 예를 들어 설명해 주 시겠습니까 ?
Léo Léopold Hertz 준영

2
@ LéoLéopoldHertz 준영이 스 니펫을 사용해보십시오 : python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'. 모든 모듈 이름을 하나의 큰 파이썬 목록으로 덤프해야합니다. 이 x[1]비트는에 의해 생성 된 튜플에서 모듈 이름을 뽑는 데 사용됩니다 pkgutil.iter_modules().
Philip Conrad

76

나는 이것을 현재 사용중인 모듈을보기 위해 사용합니다 :

import sys as s
s.modules.keys()

파이썬에서 실행중인 모든 모듈을 보여줍니다.

모든 내장 모듈에 대해 다음을 사용하십시오.

s.modules

모든 모듈과 가져 오기 객체를 포함하는 dict입니다.


2
# sys "import sys as s"를 가져온 후 다음과 같이 인쇄 할 수 있습니다. print sys.modules.keys ()
Dan Evans

내 게시물이 왜 수정되었는지 확실하지 않지만 이전 게시물의 실수를 수정하기 위해 게시 한 정보를 사용해 주셔서 감사합니다. help () vs help ( '')를 사용하면 오류가 반환됩니다. 이것은 dir ( '') & sys ( '') 등에도 적용됩니다. 이것이 도움이되고 제거되지 않기를 바랍니다.
Dan Evans

마지막 게시물을 무시하십시오.이 게시물은 수정되지 않았습니다. 비슷한 게시물을 여기에서 찾았습니다 : stackoverflow.com/questions/139180/… 혼란을 드려 죄송합니다.
Dan Evans

7
이 방법은 설치 되지 pydoc않았거나 pip설치 되지 않은 제한된 시스템 (제 경우에는 NAS)에서 작동하는 유일한 방법이기 때문에 피봇 되었습니다.
Thomas

1
토마스와 동의. 예를 들어, 제한된 유형의 환경이기도 한 repl.it을 사용하고 있습니다. help('modules')응답하지 않고 그냥 달려요. 그러나이 접근법 sys은 완벽하게 작동합니다
Sergiy Kolodyazhnyy

63

일반 쉘에서는

pydoc modules

위의 내용은 'nix 플랫폼에서만 작동하는 것으로 보입니다. 어쨌든, 나는 다음과 같이 명령을 조정하여 스크립트를 찾아서 실행했습니다. 번호. 나는 통과 할 것이다.
David A. Grey

2
@ DavidA.Gray Python 3이 설치된 Windows 컴퓨터 에서이 작업을 시도했지만 실제로 작동합니다. python windows launcher를 사용하면 py -m pydoc modulescmd 또는 Powershell에서 수행 할 수 있습니다 .
VKK

pydoc modulesPython 3.6이 설치된 Windows 10 py -m pydoc modules에서는 작동하지 않지만 @VKK 수정 은 cmd / Powershell에서 작동합니다.
Martin

41

pip 10 현재 허용 된 답변이 더 이상 작동하지 않습니다. 개발 팀은 get_installed_distributions루틴에 대한 액세스를 제거했습니다 . setuptools동일한 작업을 수행하기위한 대체 기능이 있습니다 . 다음은 pip 10에서 작동하는 대체 버전입니다.

import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages])
print(installed_packages_list)

이전 버전의 pip에서도 작동하는지 여부를 알려주십시오.


2
나는이 솔루션을 찾고 있었고 pkg_resources를 알아 내려고 노력하면서 내 뇌를 망쳤다. 내가 이것을 두 번 이상 공표 할 수 있다면 @Big_Al_Tx 감사합니다! 업데이트 : 제외 .... 가상 환경에서 'pip freeze'를 수행 하고이 결과와 비교하면 누락 된 패키지가 있습니다. 왜 그런 일이 일어날 수 있는지에 대한 생각이 있습니까?
numberwhun

@ numberwhun-이것이 당신을 위해 일하게되어 기쁩니다. 죄송합니다 pip freeze. 와 (과)의 불일치에 대한 답변이 없습니다 . 이 주제에 대한 나의 지식의 깊이는 다소 제한적이다. 받아 들여진 대답이 저에게 효과가 없을 때 해결책으로 향한 혼란에 빠졌고 관련 답변과 결합 setuptools하여 작동 시켰습니다.
Big_Al_Tx

github.com/pypa/pip/issues/5243-에 대한 액세스 권한 제거에 대한 개발 팀 이야기 get_installed_distributions routine.
bl79

@ bl79-그것이 내가 참조를 얻은 정확한 장소라고 생각합니다 setuptools.
Big_Al_Tx

@Big_Al_Tx : 글쎄, 나는 setuptools 옵션을 해결하기 위해 노력했다. 할 필요가 .... 예!
numberwhun

26

파이썬 셸에 설치된 패키지를 나열 해야하는 경우 help다음과 같이 명령을 사용할 수 있습니다

>>help('modules package')

22

나는 일반적으로 pip list패키지 목록 (버전 포함)을 얻는 데 사용 합니다.

이것은 물론 가상 환경에서도 작동합니다. 글로벌 패키지가 아닌 가상 환경에만 설치된 것을 표시하려면을 사용하십시오 pip list --local.

다음pip list 은 몇 가지 좋은 예와 함께 사용 가능한 모든 옵션을 보여주는 설명서 입니다.


13

pkgutil.iter_modules를 사용한 매우 간단한 검색

from pkgutil import iter_modules
a=iter_modules()
while True:
    try: x=a.next()
    except: break
    if 'searchstr' in x[1]: print x[1]

for 루프 대신 while을 사용해야 할 이유가 있습니까? 나는 사용하여 썼고 for m in iter_modules()잘 작동했다.
Joao Ponte

13

Windows에서는 cmd에 이것을 입력하십시오.

c:\python\libs>python -m pip freeze

이것은 python3 -m pip freeze-python 3.5.3을 사용하여 나를 위해 일했습니다.
dpminusa

이것은 잘 작동하며 변수가 정의 된 경우 libs 디렉토리에있을 필요는 없습니다.
mcy

12

OS X에서 사용자 정의 설치된 python 2.7을 실행했습니다. 설치된 모듈을 나열하려면 X11이 필요했습니다 (도움말 및 pydoc을 사용하여).

X11을 설치하지 않고 모든 모듈을 나열하려면 pydoc을 http-server로 실행했습니다.

pydoc -p 12345

그런 다음 Safari가 http://localhost:12345/모든 모듈을 보도록 지시 할 수 있습니다.



12

도움이 될 것입니다

터미널 또는 IPython에서 다음을 입력하십시오.

help('modules')

그때

In [1]: import                      #import press-TAB
Display all 631 possibilities? (y or n)
ANSI                   audiodev               markupbase
AptUrl                 audioop                markupsafe
ArgImagePlugin         avahi                  marshal
BaseHTTPServer         axi                    math
Bastion                base64                 md5
BdfFontFile            bdb                    mhlib
BmpImagePlugin         binascii               mimetools
BufrStubImagePlugin    binhex                 mimetypes
CDDB                   bisect                 mimify
CDROM                  bonobo                 mmap
CGIHTTPServer          brlapi                 mmkeys
Canvas                 bsddb                  modulefinder
CommandNotFound        butterfly              multifile
ConfigParser           bz2                    multiprocessing
ContainerIO            cPickle                musicbrainz2
Cookie                 cProfile               mutagen
Crypto                 cStringIO              mutex
CurImagePlugin         cairo                  mx
DLFCN                  calendar               netrc
DcxImagePlugin         cdrom                  new
Dialog                 cgi                    nis
DiscID                 cgitb                  nntplib
DistUpgrade            checkbox               ntpath

이것이 정답입니다! 한 줄 :)
AlmostPitt

9

이 용액에 기초한 기본 모듈이다 importlibpkgutilCPython의 3.4 및 3.5의 CPython 작업하지만 CPython과 2에 대한 지원이 없다.


설명

  1. sys.builtin_module_names-모든 내장 모듈의 이름을 지정합니다 ( 여기서 내 대답을 보십시오 )
  2. pkgutil.iter_modules() -사용 가능한 모든 모듈에 대한 정보를 반환합니다
  3. importlib.util.find_spec() -존재하는 경우 모듈 반입에 대한 정보를 리턴합니다.
  4. BuiltinImporter-내장 모듈 수입 업체 ( docs )
  5. SourceFileLoader-표준 파이썬 모듈의 수입업자 (기본적으로 확장자 * .py를 가짐) ( docs )
  6. ExtensionFileLoader- 공유 라이브러리 로 모듈을 가져 오기 (C 또는 C ++로 작성)

전체 코드

import sys
import os
import shutil
import pkgutil
import importlib
import collections

if sys.version_info.major == 2:
    raise NotImplementedError('CPython 2 is not supported yet')


def main():

    # name this file (module)
    this_module_name = os.path.basename(__file__).rsplit('.')[0]

    # dict for loaders with their modules
    loaders = collections.OrderedDict()

    # names`s of build-in modules
    for module_name in sys.builtin_module_names:

        # find an information about a module by name
        module = importlib.util.find_spec(module_name)

        # add a key about a loader in the dict, if not exists yet
        if module.loader not in loaders:
            loaders[module.loader] = []

        # add a name and a location about imported module in the dict
        loaders[module.loader].append((module.name, module.origin))

    # all available non-build-in modules
    for module_name in pkgutil.iter_modules():

        # ignore this module
        if this_module_name == module_name[1]:
            continue

        # find an information about a module by name
        module = importlib.util.find_spec(module_name[1])

        # add a key about a loader in the dict, if not exists yet
        loader = type(module.loader)
        if loader not in loaders:
            loaders[loader] = []

        # add a name and a location about imported module in the dict
        loaders[loader].append((module.name, module.origin))

    # pretty print
    line = '-' * shutil.get_terminal_size().columns
    for loader, modules in loaders.items():
        print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
        for module in modules:
            print('{0:30} | {1}'.format(module[0], module[1]))


if __name__ == '__main__':
    main()

용법

CPython3.5의 경우 (절사 됨)

$ python3.5 python_modules_info.py 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_codecs                        | built-in
_collections                   | built-in
_functools                     | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_operator                      | built-in
_signal                        | built-in
_sre                           | built-in
_stat                          | built-in
_string                        | built-in
_symtable                      | built-in
_thread                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/local/lib/python3.5/__future__.py
_bootlocale                    | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc               | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle                 | /usr/local/lib/python3.5/_compat_pickle.py
_compression                   | /usr/local/lib/python3.5/_compression.py
_dummy_thread                  | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase                    | /usr/local/lib/python3.5/_markupbase.py
_osx_support                   | /usr/local/lib/python3.5/_osx_support.py
_pydecimal                     | /usr/local/lib/python3.5/_pydecimal.py
_pyio                          | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins                  | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect                        | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2                           | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)

CPython3.4의 경우 (잘림)

$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_bisect                        | built-in
_codecs                        | built-in
_collections                   | built-in
_datetime                      | built-in
_elementtree                   | built-in
_functools                     | built-in
_heapq                         | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_md5                           | built-in
_operator                      | built-in
_pickle                        | built-in
_posixsubprocess               | built-in
_random                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/lib/python3.4/__future__.py
_bootlocale                    | /usr/lib/python3.4/_bootlocale.py
_collections_abc               | /usr/lib/python3.4/_collections_abc.py
_compat_pickle                 | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread                  | /usr/lib/python3.4/_dummy_thread.py
_markupbase                    | /usr/lib/python3.4/_markupbase.py
_osx_support                   | /usr/lib/python3.4/_osx_support.py
_pyio                          | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2                           | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp                     | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr                     | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw                     | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt                         | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)

여기에서 Adam의 접근 방식에 대한 접근 방식을 비교해 주시겠습니까? stackoverflow.com/a/23885252/54964
Léo Léopold Hertz 준영

@ Léo Léopold Hertz, 왜 필요한가요?
PADYMKO

귀하의 접근 방식이 Adam의 접근 방식보다 나은 / 더 나쁜 방법을 이해합니다.
Léo Léopold Hertz 준영

1
@ 레오 레오폴트 헤르츠. 짧은 대답 : 프로덕션에서 직접 시도하고 결론을 내리십시오. 긴 대답 : Adam의 접근 방식은 pipPython으로 작성된 소프트웨어 패키지를 설치하고 관리하는 데 사용되는 패키지 관리 시스템을 기반으로 하며 결과 pip.get_installed_distributions()는 pip와 함께 설치된 모듈을 반환합니다. 내 대답은 전적으로 Python의 표준 라이브러리를 기반으로하며 가져올 수있는 모든 모듈을 다룹니다. 내 대답의 가장 큰 단점
-CPython

1
@ Léo Léopold Hertz는 당신이 착각합니다. 내 컴퓨터에서 테스트했습니다. 내 대답에는 **truncated**출력이 잘리는 특별한 의미 가 있습니다. 어쩌면 조심하지는 않지만 그렇지 않은 경우 시스템 및 Python 구현에 대한 정보를 보내려면 추가 연구를 통해 문제를 해결할 것입니다.
PADYMKO

9

경고 : Adam Matan은 pip> 10.0에서이 사용을 권장하지 않습니다. 또한 아래 @sinoroc의 의견을 읽으십시오.

이것은 Adam Matan의 답변 (허용 된 답변) 에서 영감을 얻었습니다 .

import tabulate
try:
  from pip import get_installed_distributions
except:
  from pip._internal.utils.misc import get_installed_distributions

tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
  tabpackages.append([package.location, package.key, package.version])

print(tabulate.tabulate(tabpackages))

그런 다음 형식으로 표를 인쇄합니다

19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
-------------------------------------------  --------------  ------
/home/pi/.local/lib/python2.7/site-packages  enum-compat     0.0.2
/home/pi/.local/lib/python2.7/site-packages  enum34          1.1.6
/home/pi/.local/lib/python2.7/site-packages  pexpect         4.2.1
/home/pi/.local/lib/python2.7/site-packages  ptyprocess      0.5.2
/home/pi/.local/lib/python2.7/site-packages  pygatt          3.2.0
/home/pi/.local/lib/python2.7/site-packages  pyserial        3.4
/usr/local/lib/python2.7/dist-packages       bluepy          1.1.1
/usr/local/lib/python2.7/dist-packages       click           6.7
/usr/local/lib/python2.7/dist-packages       click-datetime  0.2
/usr/local/lib/python2.7/dist-packages       construct       2.8.21
/usr/local/lib/python2.7/dist-packages       pyaudio         0.2.11
/usr/local/lib/python2.7/dist-packages       tabulate        0.8.2
-------------------------------------------  --------------  ------

그러면 설치하거나 설치하지 않은 패키지를 쉽게 식별 할 수 있습니다 sudo.


참고 사항 : 나는 한 번 sudo또는 한 번없이 패킷을 설치할 때 하나가 우선하여 다른 하나는 나열되지 않습니다 (하나의 위치 만 표시됨). 그런 다음 로컬 디렉토리의 디렉토리 만 나열됩니다. 이것은 향상 될 수 있습니다.


1
권장하지 않습니다. 여기를 참조하십시오 : pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program
sinoroc

1
@sinoroc 이것을 지적 해 주셔서 감사합니다. 이 스크립트는 pip한 번만 사용한 다음 종료 한다는 유일한 목적을 가지고 있기 때문에 포인트 1 ~ 3은이 솔루션에 적용되지 않는 것 같습니다 . 동작이 변경 될 수있는 문제가 더있는 것 같습니다.
Daniel F

공개 API가없는 이유는이 특정 코드에 적용되지 않습니다. 그러나 pip는 공개 API를 보장 할 의무가 없으므로 이전 릴리스와 마찬가지로 이후 릴리스에서 내부 API, 코드 구조 등을 자유롭게 변경할 수 있습니다. 그렇기 때문에이 코드에 시도 / 제외가있어 내부 API가 공개 API가 아닌 내부 API임을 명확히하기 위해 이전 내부 코드 재구성을 포착했습니다 ( _internal). 결국, 그것은 분명히 작동하지만 나쁜 습관입니다. 더 나은 대안이 있으며 일부는이 질문에 대한 다른 답변에 있습니다.
sinoroc

1
"pip"모듈이 없으면이 스크립트가 작동하지 않습니다.
Alexander Stohr


6

아나콘다 파이썬 배포판이 설치되어 있다면 ,

$conda list

위에서 설명한 솔루션 외에도.


이 라인을 어디 / 어떻게 운영합니까?
HuckIt

UNIX / Mac OS X 컴퓨터에있는 경우 터미널을 열고 그냥 입력 conda install하면 작동합니다. :)
Shreyas

Windows 7 컴퓨터를 사용하고 있습니다. 실제로 내 경로에서 찾았지만 conda.exe는 AppData \ Local \ Continuum \ Anaconda \ Scripts에 있습니다.
HuckIt

6
  1. 사용 가능한 모든 모듈을 얻으려면 sys.modules
  2. 설치된 모든 모듈을 읽으려면 (읽기 :에 의해 설치됨 pip)pip.get_installed_distributions()

두 번째 목적으로 예제 코드는 다음과 같습니다.

import pip
for package in pip.get_installed_distributions():
    name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
    key = package.key # sqlalchemy, django, flask-oauthlib
    module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
    location = package.location # virtualenv lib directory etc.
    version = package.version # version number

sys.modules 명령 은 최신 OSX의 Python에서 작동하지 않습니다. NameError : 이름 'system'이 정의되지 않았습니다 .
Léo Léopold Hertz 준영

@Masi python.org/usr/bin/python 에서 온 것 입니까? 전자의 경우 문제없이 사용할 수 있습니다 . sys.modules
yegle

나는 / usr / bin / python을 의미한다 .
Léo Léopold Hertz 준영

@Masi이 문제에 여전히 관심이 있는지 확실하지 않습니다. 분명히 당신은 system.modules대신에 사용 하고 sys.modules있습니다.
yegle

롤 내 실수는 원래 sys -package를 가져 오지 않았다는 것입니다. 따라서 대신 sys가져 오십시오. sys.modules 가 예상대로 작동합니다.
Léo Léopold Hertz 준영

6

Pip 20과 같은 최신 버전의 경우

파이썬 편집기 또는 IPython에서 다음을 실행하십시오.

import pkg_resources; 
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)

다른 답변을 읽고이 콤보를 모아서 파이썬에서 가장 빠르고 쉽습니다.


4

pip freeze 는 모든 패키지를 찾지 만 파이썬 패키지가있는 모든 경로를 나열하기 위해 다음 명령을 작성할 수 있습니다.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

4

고양이를 껍질을 벗기는 방법은 여러 가지가 있습니다.

  • 가장 간단한 방법은 pydoc다음과 같이 쉘에서 직접 함수 를 사용하는 것입니다.
    pydoc modules

  • 그러나 자세한 정보 는 설치 날짜를 알려주 는 pip-date 도구를 사용하십시오 .
    pip install pip-date


여기에 이미지 설명을 입력하십시오


3

많은 아이디어가 있습니다. 처음에는이 두 가지에 대해 숙고하고 있습니다.

단점 : 항상 설치되는 것은 아님

도움말 ( '모듈')

단점 : 콘솔로 출력; 깨진 모듈로 (ubuntu 참조) segfault 할 수 있습니다

기본 라이브러리를 사용하고 이전 Python 2.x와 호환되는 쉬운 접근 방식이 필요합니다.

그리고 나는 빛을 본다 : listmodules.py

2.5의 문서 소스 디렉토리에 숨겨진 것은 Python 설치에 사용 가능한 모든 모듈을 나열하는 작은 스크립트입니다.

장점 :

용도는 , SYS, 운영 체제, 다시 시간을 꼬마 도깨비

Python 1.5.2 이상에서 실행되도록 설계

소스 코드는 매우 간결하므로 버그가있는 모듈의 예외 목록을 전달하는 등의 간단한 수정 작업을 수행 할 수 있습니다 (가져 오기 시도하지 않음)


3

AWS Lambda에서 기본적으로 사용 가능한 특정 버전의 패키지를 찾아야했습니다. 나는이 페이지에서 아이디어를 매쉬업했다. 나는 후손을 위해 그것을 공유하고 있습니다.

import pkgutil

__version__ = '0.1.1'

def get_ver(name):
    try:
        return str(__import__(name).__version__)
    except:
        return None

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': [{
                   'path': m.module_finder.path,
                   'name': m.name,
                   'version': get_ver(m.name),
                 } for m in list(pkgutil.iter_modules())
                 #if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
                ],
    }

내가 발견 한 것은 제공된 boto3 라이브러리가 오래되어 코드가 실패한 것이 내 잘못이 아니라는 것입니다. 내 프로젝트에 boto3과 botocore를 추가해야했습니다. 그러나 이것이 없으면 코드가 잘못되었다고 생각하면서 머리를 두드리고 있었을 것입니다.

{
  "statusCode": 200,
  "body": [
    {
      "path": "/var/task",
      "name": "lambda_function",
      "version": "0.1.1"
    },
    {
      "path": "/var/runtime",
      "name": "bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "boto3",
      "version": "1.9.42"
    },
    {
      "path": "/var/runtime",
      "name": "botocore",
      "version": "1.12.42"
    },
    {
      "path": "/var/runtime",
      "name": "dateutil",
      "version": "2.7.5"
    },
    {
      "path": "/var/runtime",
      "name": "docutils",
      "version": "0.14"
    },
    {
      "path": "/var/runtime",
      "name": "jmespath",
      "version": "0.9.3"
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_exception",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "s3transfer",
      "version": "0.1.13"
    },
    {
      "path": "/var/runtime",
      "name": "six",
      "version": "1.11.0"
    },
    {
      "path": "/var/runtime",
      "name": "test_bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "urllib3",
      "version": "1.24.1"
    },
    {
      "path": "/var/lang/lib/python3.7",
      "name": "__future__",
      "version": null
    },
...

내가 발견 한 것은 그들이 공식적으로 출판 한 것과는 달랐다 . 이 글을 쓰는 시점에서 :

  • 운영 체제 – Amazon Linux
  • AMI – amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
  • 리눅스 커널 – 4.14.77-70.59.amzn1.x86_64
  • JavaScript 용 AWS SDK – 2.290.0 \
  • Python 용 SDK (Boto 3) – 3-1.7.74 botocore-1.10.74

1

설치

pip install pkgutil

암호

import pkgutil

for i in pkgutil.iter_modules(None): # returns a tuple (path, package_name, ispkg_flag)
    print(i[1]) #or you can append it to a list

샘플 출력 :

multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil

1

다음은 설치된 모듈 목록을 반환하는 파이썬 코드 솔루션입니다. 버전 번호를 포함하도록 코드를 쉽게 수정할 수 있습니다.

import subprocess
import sys
from pprint import pprint

installed_packages = reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages = [pkg.split('==')[0] for pkg in installed_packages if pkg != '']
pprint(installed_packages)


-10

껍질에서

ls site-packages

도움이되지 않으면 할 수 있습니다.

import sys
import os
for p in sys.path:
    print os.listdir( p )

그리고 그것이 무엇을 생산하는지보십시오.


어떤 사이트 패키지 디렉토리? ls / usr / {local /,} lib / python $ (python -V 2> & 1 | cut -d ""-f2 | cut -d. -f1-2) / site-packages
vezult

또한 내장 모듈 또는 사용자 정의 PYTHONPATH의 모듈 또는 setuptools "개발 모드"등에 설치된 모듈은 표시되지 않습니다.
dF.

모듈을 설치했지만 내 /usr/local/lib/python2.5/site-packages가 비어 있습니다.
Léo Léopold Hertz 준영

14
이 하향식 답변을 삭제하지 않은 것에 대한 조언. 커뮤니티에서 공통 답변이 왜 잘못 간주되는지 확인할 수 있습니다.
Jeremy Stein

1
@JeremyStein 더 나은 전략 (더 도움이 아마 덜 담당자-손상) 아마이되면 그것의 잘못이 코멘트에 설명 된 이유를 설명 할 수있는 질문을 편집하는 것입니다 ...
카일 스트랜드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.