파이썬 사이트 패키지 디렉토리의 위치는 어떻게 찾습니까?


941

내 사이트 패키지 디렉토리의 위치는 어떻게 찾습니까?


63
하나의 패키지의 정확한 위치를 원한다면 다음을 사용할 수 있습니다pip show <package name>
joshuakcockrell

답변:


530

사이트 패키지 디렉토리에는 전역사용자마다 두 가지 유형이 있습니다 .

  1. 글로벌 사이트 패키지 ( " dist-packages ") 디렉토리는 다음 sys.path을 실행할 때 나열됩니다 .

    python -m site

    보다 간결한 목록을 보려면 Python 코드 getsitepackages사이트 모듈 에서 실행 하십시오 .

    python -c 'import site; print(site.getsitepackages())'

    참고 : virtualenvs의로 getsitepackages를 사용할 수없는 , sys.path하지만, 제대로 VIRTUALENV의 사이트 패키지 디렉토리를 나열합니다 이상에서. Python 3에서는 sysconfig 모듈을 대신 사용할 수 있습니다 .

    python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
  2. 사용자 당 사이트 패키지 디렉토리 ( PEP (370)는 파이썬 로컬 패키지를 설치하는 경우)입니다 :

    python -m site --user-site

    이것이 존재하지 않는 디렉토리를 가리키는 경우 Python의 종료 상태를 확인하고 python -m site --help설명을 참조하십시오 .

    힌트 : 사용자 사이트 패키지 마다 설치된 모든 목록을 실행 pip list --user하거나 pip freeze --user제공 합니다.


실용 팁

  • <package>.__path__특정 패키지의 위치를 ​​식별 할 수 있습니다 : ( details )

    $ python -c "import setuptools as _; print(_.__path__)"
    ['/usr/lib/python2.7/dist-packages/setuptools']
  • <module>.__file__특정 모듈의 위치를 ​​식별 할 수 있습니다 : ( 차이점 )

    $ python3 -c "import os as _; print(_.__file__)"
    /usr/lib/python3.6/os.py
  • pip show <package>데비안 스타일 패키지 정보를 보여주기 위해 실행 합니다 :

    $ pip show pytest
    Name: pytest
    Version: 3.8.2
    Summary: pytest: simple powerful testing with Python
    Home-page: https://docs.pytest.org/en/latest/
    Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
    Author-email: None
    License: MIT license
    Location: /home/peter/.local/lib/python3.4/site-packages
    Requires: more-itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, pluggy

17
virtualenv에 사이트 패키지 디렉토리가 있습니다. virtualenv 내부 / 외부 사이트 별 모듈에 대한 디렉토리를 얻을 수 있습니다 python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"(Python 2와 3에서도 작동합니다).
jfs

4
좋은. 그리고 첫 번째를 얻으려면 :python -c "import site; print(site.getsitepackages()[0])"
브렌트 파우스트

2
이것은 파이썬 사용에 대한 기본 자습서에 있어야합니다. 나는 수년간 파이썬으로 일해 왔으며 사이트 모듈에 대해 몰랐습니다. 너무 많은 두통을 저장했을 것입니다 ...
salotz

1
파이썬 공식 튜토리얼의 변경을 제안했습니다. 자세한 내용은 PR # 16974 를 참조하고 @salotz 제안에 감사드립니다!
Peterino

1
stackoverflow.com/a/52638888/1365918 이이 질문에 대한 가장 좋은 대답 이라고 생각 합니다.
kapad

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

(또는로 첫 번째 항목 site.getsitepackages()[0])


17
이것은 좋지만 불행히도이 기능은 python2.7에서만 사용할 수 있습니다. 따라서
python2.7

15
python -c "가져 오기 사이트; print (site.getsitepackages ())"
Lars Schneider

29
virtualenv (python 2.7.8)와 함께 사용할 때 AttributeError : 'module'객체에 'getsitepackages'속성이 없습니다. 아래 distutils 솔루션이 작동합니다.
radtek

8
@radtek : venv의, 나는 통해 venv 감지 hasattr(sys,'real_prefix')다음에서 경험적 사이트 패키지를 결정하는 [p for p in sys.path if p.endswith('site-packages')][-1]사람이하기 전에 발견이있는 경우 (플러스 확인 [-1].
eudoxos

4
@radtek 사이트 모듈이 virtualenv github.com/pypa/virtualenv/issues/355에서
Guillem Cucurull

319

다음과 같은 솔루션 :

  • virtualenv 외부- 글로벌 사이트 패키지 경로 제공
  • virtualenv insidue - virtualenv의 사이트 패키지를 제공 합니다

...이 하나의 라이너입니다.

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

가독성을 위해 (한 줄짜리로 사용하기보다는) 다음과 같이 표시됩니다.

from distutils.sysconfig import get_python_lib
print(get_python_lib())


출처 : 아주 오래된 버전의 "Django 설치 방법"문서 (Django 설치 이상으로 유용하지만)


1
virtualenv는 사이트 패키지를 찾는 방법을 제공합니까?
Daryl Spitzer

10
명령이있는 virtualenvwrapper를 사용 cdsitepackages하여 환경의 사이트 패키지 디렉토리로 직접 변경할 수 있습니다.
john2x 2019

6
@PiotrDobrogost : Linux의 virtualenv에서 Python 2.7에서 작동합니다.
RichVel

2
첫 번째 의견은 더 이상 적용되지 않습니다. 이것은 virtualenv 외부와 내부 모두에 올바른 위치를 보여줍니다.
astrojuanlu

2
리눅스 배쉬를 사용하여 Windows 10에 나를 위해 작동하지 않았다, 그것은 반환 /usr/lib/python3/dist-packages대신에 /usr/lib/python3.5/dist-packages.
Delgan

99

우분투의 경우

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

... 정확하지 않습니다.

그것은 당신을 가리킬 것입니다 /usr/lib/pythonX.X/dist-packages

이 폴더에는 프로그램을 실행하기 위해 운영 체제가 자동으로 설치 한 패키지 만 포함됩니다.

우분투 에서 setup_tools \ easy_install \ pip를 통해 설치된 패키지를 포함하는 사이트 패키지 폴더는/usr/local/lib/pythonX.X/dist-packages

유스 케이스가 설치 또는 소스 코드 읽기와 관련된 경우 두 번째 폴더가 더 유용합니다.

Ubuntu를 사용하지 않으면 첫 번째 코드 상자를 터미널에 복사하여 붙여 넣는 것이 안전 할 수 있습니다.


3
asker가 특정 패키지 위치 module.__file__를 따르는 경우 더 나은 방법입니다. 설치하려는 경우 도구를 사용하십시오.
Tobu

'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()우분투에서 ( 목록에서 이어지지 /usr/local/... ). 당신은에 뭔가를 얻을 /usr/local통해 sudo pip당신은 사용하지 말아야 sudo pip당신이 당신의 자신의 분포를하기로 결정하지 않는 한 우분투 : 당신이 사용하는 경우 sudo pip, 반드시 현재의 모든 종속성 있는지 확인하는 것은 귀하의 책임입니다 미래 파이썬 모듈을 통해 설치 sudo apt또는 sudo pip호환됩니다. 고려 어떤 문제를 virtualenv해결하기 위해 만들어졌습니다
JFS

dist-packages(L) 우분투에서 2의 차이점을 이해하기위한 명확한 설명 .
Timo

69

이것이 나를 위해 일한 것입니다.

python -m site --user-site

15
나를 위해 이것은 존재하지 않는 폴더 ( ~/.local/lib/python2.7/site-packages)를 가리 킵니다 .
닐 트래 프트

1
마찬가지로, OS X Mavericks에서 내 집 .local은 내가 찾고 싶었던 것이 아니며 그래도 실제로는 없습니다.
radtek

그것의 나의 주 / 라이브러리 내가 수동으로 탐색 그것으로, 어떤 이유로 직접 전체 경로가 작동하지 않는했다 폴더
efwjames

여기에 설치된 패키지를 어떻게 사용합니까? 내가 virtualenv하면 패키지가 존재하지 않는다고 불평합니다. 사용자 정의 위치에 설치된 패키지를 어떻게 호출합니까?
AbtPst

2
이것은 파이썬이 사용자 특정 패키지를 찾을 위치를 알려줍니다. "존재하지도 않았다"및 "찾고 싶지 않은 것"과 같은 주석은이 문맥에서 의미가 없습니다.
정직한 아베

28

'django'패키지를 설치했다고 가정 해 봅시다. 가져 와서 dir (django)을 입력하십시오. 해당 모듈의 모든 기능과 속성이 표시됩니다. 파이썬 인터프리터를 입력하십시오-

>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']

수은을 설치 한 경우에도 같은 작업을 수행 할 수 있습니다.

Snow Leopard를위한 것입니다. 그러나 나는 그것이 일반적으로 작동해야한다고 생각합니다.


>>> import pg >>> print pg .__ path__ Traceback (가장 최근 호출) : <module>의 파일 "<stdin>", line 1, AttributeError : 'module'객체에 ' path ' 속성이 없습니다.
Dannid

작동합니다 .PYDEV 경로에 추가 할 sklearn 패키지를 찾아야합니다. 감사합니다.
berkay

django.__file__오히려 이것을 위해 사용하십시오 __path__. 그리고 아니, 이것이 사이트 패키지와 관련이 있다는 것을 보장하지는 않지만 장고와 같은 것들, 아마도 핍이 설치 되었을 것입니다. 서둘러서 사용할 수 있습니다. 다른 목적도 (예를 들어 파일 시스템에서 기본 구성 파일 읽기).
JL Peyret

이 답변과 다른 답변을 바탕으로 명령 줄에서 한 줄로 foo.bar패키지 경로를 얻을 수 있습니다 .python -c "import foo.bar as _; print(_.__path__[0])"
snark

23

다른 사람들이 언급했듯이 distutils.sysconfig관련 설정이 있습니다.

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

... 기본값 site.py은 조금 더 조잡하지만 아래에서 설명합니다.

import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])

(또한 추가 ${sys.prefix}/lib/site-pythonsys.exec_prefix 상수가 다르면 두 경로를 하고 추가합니다 ).

즉, 문맥은 무엇입니까? 당신은 당신의 site-packages직접 엉망해서는 안됩니다 ; setuptools / distutils는 설치를 위해 작동하며, 프로그램이 pythonpath가 완전히 사용자 로컬 인 virtualenv에서 실행 중일 수 있으므로 시스템 사이트 패키지를 직접 사용한다고 가정해서는 안됩니다.


3
python2virtualenv의 유무에 관계없이 osx 및 우분투에서 안정적으로 작동 하지만 전혀 그렇지 않습니다 python3.
지터

2
2008 년은 얼마 전입니다.이 답변은 Python 3.0이 출시되기 3 개월 전이었습니다.
Charles Duffy

물론 오늘은 저의 의견이 도움이 될 것입니다. 틀렸다면 정정 해주세요. 또한, 나는이 답변이나 다른 어떤 것에 대해서도 공감하지 않았다 python3.
지터

22

최신 stdlib 방식은 sysconfig버전 2.7 및 3.2+에서 사용 가능한 모듈을 사용하는 것입니다.

참고 : sysconfig( source )는 여기 다른 답변에서 언급 된 distutils.sysconfig하위 모듈 ( source ) 과 혼동되어서는 안됩니다 . 후자는 완전히 다른 모듈이며 부족합니다.get_paths 아래에 설명 기능이 없습니다.

파이썬은 현재 8 개의 경로 ( docs )를 사용합니다 :

  • stdlib : 플랫폼 별이 아닌 표준 Python 라이브러리 파일이 포함 된 디렉토리입니다.
  • platstdlib : 플랫폼 별 표준 Python 라이브러리 파일이 포함 된 디렉토리입니다.
  • platlib : 사이트 별, 플랫폼 별 파일의 디렉토리입니다.
  • purelib : 사이트 별, 플랫폼 이외의 파일 용 디렉토리.
  • include : 비 플랫폼 특정 헤더 파일 용 디렉토리.
  • platinclude : 플랫폼 별 헤더 파일의 디렉토리입니다.
  • scripts : 스크립트 파일의 디렉토리.
  • data : 데이터 파일의 디렉토리입니다.

대부분의 경우,이 질문을 찾는 사용자는 'purelib'경로에 관심이있을 것입니다 ( 일부 경우 'platlib'에도 관심이있을 수 있습니다). 현재 허용되는 답변과 달리이 방법은 virtualenv 활성화 여부에 관계없이 여전히 작동합니다.

시스템 레벨에서 (Mac OS의 Python 3.7.0) :

>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'

venv를 사용하면 다음과 같은 것을 얻을 수 있습니다

>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/private/tmp/.venv/lib/python3.7/site-packages'

쉘 스크립트를 사용하여 이러한 세부 사항을 표시 할 수 sysconfig있으며 모듈 로 실행 하여 호출 할 수 있습니다 .

python -m sysconfig

이것은 훌륭한 답변입니다. 새로운 sysconfig 모듈이 이것을 쉽게 만들어줍니다. platlib예를 들어 로컬 접두사를 얻는 방법이 /usr/local/lib/python3.6/site-packages있습니까? 전통적으로 로컬에 설치된 것들이 들어갑니다 /usr/local.
eudoxos

이 질문에 대한 가장 좋은 답변입니다! 감사합니다. 내가 누락 된 것을 발견 한 유일한 것은 수입 명세서가 발견 될 때이 위치를 확인하는 순서였습니다. 또한 파이썬이로드 될 때 이러한 위치 중 사전 검색 / 캐시 된 곳이 있습니까? 그것을 아는 것도 유용한 IMO 일 것입니다.
kapad

21

데비안 기반 시스템에서 파이썬 설치와 함께 설치된 기본 시스템 패키지는 다음에서 찾을 수 있습니다.

/usr/lib/python2.7/dist-packages/

OSX에서- /Library/Python/2.7/site-packages

이 작은 코드를 사용하여 :

from distutils.sysconfig import get_python_lib
print get_python_lib()

그러나 설치된 패키지 목록은 pip다음 위치에서 찾을 수 있습니다.

/ usr / local / bin /

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

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

참고 : 위치는 OSX와 같이 OS에 따라 다를 수 있습니다

>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']

내가 올바르게 기억한다면, dist-packages는 데비안과 파생물에 따라 다릅니다.
사무엘

1
@SamuelSantana 당신이 맞습니다. dist-packages는 데비안 기반 시스템에 따라 다릅니다. 이 경우 site.getsitepackages()시스템 설치에서 호출 되었으므로 dist-packages, 다른 설치에는 사이트 패키지가 표시됩니다.
fnatic_shank 5

15

모든 답변 (또는 반복되는 동일한 답변)이 부적절합니다. 당신이하고 싶은 것은 이것입니다 :

from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
  """ class easy_install had problems with the fist parameter not being
      an instance of Distribution, even though it was. This is due to
      some import-related mess.
      """

  def __init__(self):
    from distutils.dist import Distribution
    dist = Distribution()
    self.distribution = dist
    self.initialize_options()
    self._dry_run = None
    self.verbose = dist.verbose
    self.force = None
    self.help = 0
    self.finalized = 0

e = easy_install_default()
import distutils.errors
try:
  e.finalize_options()
except distutils.errors.DistutilsError:
  pass

print e.install_dir

마지막 줄은 설치 디렉토리를 보여줍니다. 위의 것들은 그렇지 않은 반면 우분투에서 작동합니다. windows 나 다른 dists에 대해서는 묻지 않지만 easy_install이 기본적으로 사용하는 것과 동일한 디렉토리이기 때문에 easy_install이 작동하는 모든 곳 (예 : Mac)에서도 정확할 것입니다. 즐기세요 참고 : 원본 코드에는 많은 욕설이 있습니다.


1
고마워, 이것은 매우 유용합니다. 괄호가있는 py3에서는 /usr/local/lib/python3.4/dist-packages를 얻습니다 ./usr/lib/python3.4/dist를 얻는 방법을 알아 내려고 노력 중입니다. -패키지는 더 플레이해야합니다.
Stuart Axon 5

4
외부 라이브러리가 필요하며 easy_install사용할 수없는 경우 정상적으로 실패하지 않습니다. :)
jitter

1
실제로 이것은 완벽하지는 않지만 나에게 효과가 있었고 알아내는 데 많은 시간이 걸렸으므로 다른 사람들이 내가 이미 보낸 시간을 바탕으로 구축 할 수 있기를 바랍니다.
사기꾼

13

참고 : 제안 된 솔루션 ( distutils.sysconfig.get_python_lib())은 사이트 패키지 디렉토리가 둘 이상있을 경우 작동하지 않습니다 ( 이 기사에서 권장하는 대로 ). 기본 사이트 패키지 디렉토리 만 리턴합니다.

아아, 나는 더 좋은 해결책이 없다. 파이썬은 사이트 패키지 디렉토리를 추적하는 것이 아니라 그 안에 패키지 만있는 것 같습니다.


1
그것이 get_python_lib()virtualenv 내에서 실행될 때 virtualenv의 사이트 패키지가 아니라 virtualenv를 만드는 데 사용되는 Python의 사이트 패키지 를 보여주는 이유 입니다.
Piotr Dobrogost

3
@Piotr 아마도 distutils.sysconfig의 버그 일 것입니다. 방금 테스트 한 결과 예상대로 내부 사이트 패키지를 얻습니다.
Tobu

또한 Linux의 virtualenv에 설치된 Python 2.7을 사용하여 테스트했으며 distutils.sysconfig 메소드는 내부 Python의 사이트 패키지를 가져 오기 위해 제대로 작동합니다.
RichVel

12

이것은 나를 위해 작동합니다. dist-packages와 site-packages 폴더를 모두 얻을 수 있습니다. 폴더가 파이썬의 경로에 있지 않으면 어쨌든 잘하지 않을 것입니다.

import sys; 
print [f for f in sys.path if f.endswith('packages')]

출력 (우분투 설치) :

['/home/username/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']

2
허용되는 답변이 권장되는 방법이므로 약간의 해킹이기 때문에 왜 더 나은지 알려 주어야합니다.
CharlesB

해킹에 어떤 문제가 있습니까? ;) 대화식으로 작업하는 경우 이해하기 쉽고 간단합니다.
just_an_old_guy

11

"낮은 기술"특성으로 인해 가상 환경 내외부의 모든 배포에서 작동합니다. os 모듈은 항상 'site-packages'의 상위 디렉토리에 있습니다.

import os; print(os.path.dirname(os.__file__) + '/site-packages')

dir을 site-packages dir로 변경하려면 다음 별명을 사용합니다 (* nix 시스템).

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'

10

get_python_lib이미 언급 된 기능에 대한 추가 참고 사항 : 일부 플랫폼에서는 플랫폼 특정 모듈 (예 : 컴파일이 필요한 모듈)에 다른 디렉토리가 사용됩니다. plat_specific=True함수에 전달 하면 플랫폼 별 패키지 용 사이트 패키지가 제공됩니다.




3

오래된 질문에 대한 답변. 그러나 이것을 위해 ipython을 사용하십시오.

pip install ipython
ipython 
import imaplib
imaplib?

그러면 imaplib 패키지에 대한 다음과 같은 결과가 나타납니다.

Type:        module
String form: <module 'imaplib' from '/usr/lib/python2.7/imaplib.py'>
File:        /usr/lib/python2.7/imaplib.py
Docstring:  
IMAP4 client.

Based on RFC 2060.

Public class:           IMAP4
Public variable:        Debug
Public functions:       Internaldate2tuple
                        Int2AP
                        ParseFlags
                        Time2Internaldate

1
이것은 사이트 패키지 디렉토리가 아니라 패키지가 설치된 디렉토리입니다. 이것은 iPython을 사용 중이고 프로그래밍 방식으로 설치 디렉토리를 얻을 수없는 경우에만 유용합니다.
danielunderwood

3

pip의 설치 위치를 결정하려면이 명령을 시도해야합니다

파이썬 2

pip show six | grep "Location:" | cut -d " " -f2

파이썬 3

pip3 show six | grep "Location:" | cut -d " " -f2

1

작업중 인 프로젝트에 대해 약간 다른 것을 해야했습니다. 기본 설치 접두사 와 관련된 상대 사이트 패키지 디렉토리를 찾으십시오 . site-packages 폴더가에 있으면 해당 부분을 /usr/lib/python2.7/site-packages원했습니다 /lib/python2.7/site-packages. 나는 사실, 시스템 발생한 site-packages에서였다을 /usr/lib64하고, 허용 대답은 이러한 시스템에 대한 작업을하지 않았다.

사기꾼의 답변과 마찬가지로, 내 솔루션은 실제로 Distutils의 내장을 들여다보고 실제로 내부로 전달되는 경로를 찾습니다 setup.py. 나는 누군가가 다시는 이것을 알아 내지 않기를 원한다는 것을 아는 것은 매우 고통스러운 일이었습니다.

import sys
import os
from distutils.command.install import INSTALL_SCHEMES

if os.name == 'nt':
    scheme_key = 'nt'
else:
    scheme_key = 'unix_prefix'

print(INSTALL_SCHEMES[scheme_key]['purelib'].replace('$py_version_short', (str.split(sys.version))[0][0:3]).replace('$base', ''))

/Lib/site-packages또는 같은 것을 인쇄해야합니다 /lib/python3.6/site-packages.


-2

이미 추가 된 경우 PYTHONPATH다음과 같은 작업을 수행 할 수도 있습니다

import sys
print('\n'.join(sys.path))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.