답변:
사이트 패키지 디렉토리에는 전역 및 사용자마다 두 가지 유형이 있습니다 .
글로벌 사이트 패키지 ( " 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"])'
사용자 당 사이트 패키지 디렉토리 ( 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
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
(Python 2와 3에서도 작동합니다).
python -c "import site; print(site.getsitepackages()[0])"
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(또는로 첫 번째 항목 site.getsitepackages()[0]
)
hasattr(sys,'real_prefix')
다음에서 경험적 사이트 패키지를 결정하는 [p for p in sys.path if p.endswith('site-packages')][-1]
사람이하기 전에 발견이있는 경우 (플러스 확인 [-1]
.
다음과 같은 솔루션 :
...이 하나의 라이너입니다.
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 설치 이상으로 유용하지만)
cdsitepackages
하여 환경의 사이트 패키지 디렉토리로 직접 변경할 수 있습니다.
/usr/lib/python3/dist-packages
대신에 /usr/lib/python3.5/dist-packages
.
우분투의 경우
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를 사용하지 않으면 첫 번째 코드 상자를 터미널에 복사하여 붙여 넣는 것이 안전 할 수 있습니다.
module.__file__
를 따르는 경우 더 나은 방법입니다. 설치하려는 경우 도구를 사용하십시오.
'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
우분투에서 ( 목록에서 이어지지 만 /usr/local/...
). 당신은에 뭔가를 얻을 /usr/local
통해 sudo pip
당신은 사용하지 말아야 sudo pip
당신이 당신의 자신의 분포를하기로 결정하지 않는 한 우분투 : 당신이 사용하는 경우 sudo pip
, 반드시 현재의 모든 종속성 있는지 확인하는 것은 귀하의 책임입니다 미래 파이썬 모듈을 통해 설치 sudo apt
또는 sudo pip
호환됩니다. 고려 어떤 문제를 virtualenv
해결하기 위해 만들어졌습니다
dist-packages
(L) 우분투에서 2의 차이점을 이해하기위한 명확한 설명 .
이것이 나를 위해 일한 것입니다.
python -m site --user-site
~/.local/lib/python2.7/site-packages
)를 가리 킵니다 .
virtualenv
하면 패키지가 존재하지 않는다고 불평합니다. 사용자 정의 위치에 설치된 패키지를 어떻게 호출합니까?
'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를위한 것입니다. 그러나 나는 그것이 일반적으로 작동해야한다고 생각합니다.
django.__file__
오히려 이것을 위해 사용하십시오 __path__
. 그리고 아니, 이것이 사이트 패키지와 관련이 있다는 것을 보장하지는 않지만 장고와 같은 것들, 아마도 핍이 설치 되었을 것입니다. 서둘러서 사용할 수 있습니다. 다른 목적도 (예를 들어 파일 시스템에서 기본 구성 파일 읽기).
foo.bar
패키지 경로를 얻을 수 있습니다 .python -c "import foo.bar as _; print(_.__path__[0])"
다른 사람들이 언급했듯이 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-python
sys.exec_prefix
상수가 다르면 두 경로를 하고 추가합니다 ).
즉, 문맥은 무엇입니까? 당신은 당신의 site-packages
직접 엉망해서는 안됩니다 ; setuptools / distutils는 설치를 위해 작동하며, 프로그램이 pythonpath가 완전히 사용자 로컬 인 virtualenv에서 실행 중일 수 있으므로 시스템 사이트 패키지를 직접 사용한다고 가정해서는 안됩니다.
python2
virtualenv의 유무에 관계없이 osx 및 우분투에서 안정적으로 작동 하지만 전혀 그렇지 않습니다 python3
.
python3
.
최신 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
platlib
예를 들어 로컬 접두사를 얻는 방법이 /usr/local/lib/python3.6/site-packages
있습니까? 전통적으로 로컬에 설치된 것들이 들어갑니다 /usr/local
.
데비안 기반 시스템에서 파이썬 설치와 함께 설치된 기본 시스템 패키지는 다음에서 찾을 수 있습니다.
/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']
site.getsitepackages()
시스템 설치에서 호출 되었으므로 dist-packages, 다른 설치에는 사이트 패키지가 표시됩니다.
모든 답변 (또는 반복되는 동일한 답변)이 부적절합니다. 당신이하고 싶은 것은 이것입니다 :
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)에서도 정확할 것입니다. 즐기세요 참고 : 원본 코드에는 많은 욕설이 있습니다.
easy_install
사용할 수없는 경우 정상적으로 실패하지 않습니다. :)
참고 : 제안 된 솔루션 ( distutils.sysconfig.get_python_lib()
)은 사이트 패키지 디렉토리가 둘 이상있을 경우 작동하지 않습니다 ( 이 기사에서 권장하는 대로 ). 기본 사이트 패키지 디렉토리 만 리턴합니다.
아아, 나는 더 좋은 해결책이 없다. 파이썬은 사이트 패키지 디렉토리를 추적하는 것이 아니라 그 안에 패키지 만있는 것 같습니다.
get_python_lib()
virtualenv 내에서 실행될 때 virtualenv의 사이트 패키지가 아니라 virtualenv를 만드는 데 사용되는 Python의 사이트 패키지 를 보여주는 이유 입니다.
이것은 나를 위해 작동합니다. 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']
"낮은 기술"특성으로 인해 가상 환경 내외부의 모든 배포에서 작동합니다. 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'
pip show는 패키지에 대한 모든 세부 정보를 제공합니다 : https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
위치를 얻으려면 :
pip show <package_name>| grep Location
오래된 질문에 대한 답변. 그러나 이것을 위해 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
작업중 인 프로젝트에 대해 약간 다른 것을 해야했습니다. 기본 설치 접두사 와 관련된 상대 사이트 패키지 디렉토리를 찾으십시오 . 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
.
pip show <package name>