어떻게 찾을 수 있습의 위치 내 Python 사이트 패키지는 디렉토리?
-
02-07-2019 - |
문제
어떻게 찾을 수 있습의 위치는 나이트 패키지는 디렉토리?
해결책
의 두 가지 유형이 있 사이트 패키지는 디렉토리 글로벌 고 사용자당.
글로벌 사이트 패키지를("dist-패키지")에 나와 있는 디렉토리
sys.path
을 실행할 때:python -m site
에 대한 간단한 목록 실행
getsitepackages
서 사이트 모듈 Python 에서 코드:python -c "import site; print(site.getsitepackages())"
참고: 와 virtualenvs getsitepackages 사용할 수 없,
sys.path
에서 위 목록러나 생물 과학과 같은 다른 분야의 사이트 패키지는 디렉토리를 올바르게,하지만.이 사용자당 사이트 패키지는 디렉터리(PEP370 는)는 파이썬를 설치하는 지역 패키지:
python -m site --user-site
이 포인트 존재하지 않는 디렉토리 체크인 종료 상태의 Python 고
python -m site --help
에 대한 설명이 있습니다.힌트: 실행
pip list --user
나pip freeze --user
게 당신의 목록을 모두 설치 사용자당 사이트 패키지가 있습니다.
실 팁
<package>.__path__
를 식별할 수 있습 location(s)의 특정 패키지:(상세정보)$ 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
다른 팁
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(또는 첫 번째 항목 site.getsitepackages()[0]
)
서 "를 설치하는 방법 Django"문서 (그러나 제외할때 유용하다 더 단순한 장고 설치)-실행하여 다음과 같은 쉘에서:
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
읽기 쉬운 형식으로(사용하기보다는 한-라이너),는 다음과 같습니다:
from distutils.sysconfig import get_python_lib
print(get_python_lib())
우분투,
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
...올바르지 않습니다.
그것은 당신을 가리 킵니다 /usr/lib/pythonX.X/dist-packages
이 폴더만 패키지를 포함하는 운영체제 시스템은 자동으로 설치된 프로그램을 실행합니다.
Ubuntu, 사이트 패키지에 포함된 폴더에 설치되는 패키지를 통해 setup_tools\easy_install\pip 것에 /usr/local/lib/pythonX.X/dist-packages
두 번째는 폴더가 아마도 더 유용한 하나의 경우에 사용하는 경우가 관련 설치 또는 읽기 소스 코드입니다.
사용하지 않는 경우에는 우분투에,당신은 아마 안전한 복사본을 붙여넣기의 첫 번째 코드는 상자로 터미널도 있습니다.
이것은 나를 위해 일했:
python -m site --user-site
이 있다고 가정해 봅시 패키지를 설치한'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']
당신 같은 일을 할 수 있습 설치되어 있는 경우 mercurial.
이 있습니다.그러나 내가 생각하는 작동해야에서는 일반적인뿐만 아니라.
한 distutils.sysconfig
관련 설정:
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()
...비록 기본 site.py
가 조금 더 원,의역 below:
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
직;과 함께 진행됩/실행할 필터 작동을 위해 설치하고 프로그램이 실행되고 있습에서러나 생물 과학과 같은 다른 분야의 pythonpath 은 완전히 사용자가 지역,그래서 그것은 없다고 가정 시스템을 사용하는 사이트 패키지를 직접다.
네이티브 패키지 시스템과 함께 설치되는 파이썬 설치에는 데비안 시스템에서 찾을 수 있습니다:
/usr/lib/python2.7 일/dist-키/
에 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']
참고:의 위치에 따라 달라질 수 있습니다 OS,에서 같은 OSX
>>> 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']
모든 답변(또는:같은 대답이 계속 반복되)이 불충분하다.당신이 원하는 다음을 수행해야 합니다.
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
최종 라인 쇼를 설치 dir.에 작동 우분투하는 반면,위의 그들은하지 않습니다.지에 대해 물어 윈도우 또는 기타 dists 지만,이렇게 정확히 동일한 dir 는 easy_install 사용하는 기본적으로,그것은 아마 올바른 모든 곳에서 easy_install 일(그래서,어디서나,심지어 mac).재미 있습니다.참고:원래 코드는 많은 swearwords 습니다.
측 참고:제안된 솔루션(distutils.sysconfig.get_python_lib()
)작동하지 않을 때 하나 이상의 사이트 패키지는 디렉터리(로 추천에 의해 이 문서).그것만 반환됩니다 주요 사이트 패키지는 디렉토리에 있습니다.
아아,내가 더 나은 솔루션 중 하나.Python 하지 않는 것을 추적의 사이트 패키지는 디렉토리,그 패키지를 그리고 있습니다.
이 나를 위해 작동 합니다.그것은 당신을 얻을 것이 모두 dist-키 및 사이트 패키지 폴더에 있습니다.는 경우 폴더에 파이의 경로,그것은 없 하는 당신은 많은 어쨌든 좋은.
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']
추가 주 get_python_lib
능 이미 언급:일부 플랫폼에서 다른 디렉토리에 사용되는 플랫폼은 특정 모듈을(예를 들어:는 모듈을 컴파일이 필요).전달하는 경우 plat_specific=True
을수 있는 사이트용 패키지 플랫폼 특정 패키지가 있습니다.
이 일을 해야에서 모든 배포판에서의 가상 환경 때문에 그것은"저술"자연이다.Os 의 모듈은 항상에 있는 부모 디렉토리의'사이트 패키지'
import os; print(os.path.dirname(os.__file__) + '/site-packages')
을 변경 dir 사이트 패키지 dir 나를 사용하여 다음과 같은 별칭(에*유닉스 시스템):
alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'
from distutils.sysconfig import get_python_lib
print get_python_lib()
현대 stdlib 방법은 사용 sysconfig
모듈 버전에서 사용할 수 2.7 3.2+.현재 사용하는 파이썬 팔 경로(문서):
- stdlib:을 포함하는 디렉토리 Python 표준 라이브러리 파일하지 않는 플랫폼에 따라 다릅니다.
- platstdlib:을 포함하는 디렉토리 Python 표준 라이브러리 파일이 있는 플랫폼에 따라 다릅니다.
- platlib:디렉토리를 위해 특정 사이트,플랫폼-특정 파일입니다.
- purelib:디렉토리를 위해 특정 사이트,비-플랫폼-특정 파일입니다.
- 함:디렉토리 비-플랫폼-특정 헤더 파일이 있습니다.
- platinclude:디렉토리를 위해 플랫폼-특정 헤더 파일이 있습니다.
- 스크립트:디렉토리에 대한 스크립트 파일입니다.
- 데이터:디렉토리에 대한 데이터 파일이 있습니다.
대부분의 경우,사용자 찾기 이 질문에 관심이 있는'purelib'path(에 어떤 경우, 관심이 있을 수도 있습에'platlib'도).달리 현재 접수 응답,이 방법은 무례한 행동을 하지 않는지 여부에 따라 당신은러나 생물 과학과 같은 다른 분야 활성화됩니다.
시스템 수준에서(이 Python3.7.0mac OS):
>>> 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
(원)는 혼동하지 않으로 distutils.sysconfig
서브모듈(원)에서 언급한 여러 가지 다른답니다 여기에.는 완전히 다른 모듈과 그 부족 get_paths
능합니다.
핍쇼는 제공에 대한 모든 정보 패키지:https://pip.pypa.io/en/stable/reference/pip_show/ [pip 쇼][1]
하는 위치를 얻을:
pip show <package_name>| grep Location
답변된 질문입니다.그러나 사용할만큼이다.
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
나는 뭔가를 약간 다른 프로젝트를 위해 노력했:찾기 상대 사이트 패키지는 디렉토리에 상대적인 기준 설치합니다.는 경우 사이트 패키지 폴더에 /usr/lib/python2.7/site-packages
, 라, /lib/python2.7/site-packages
부분입니다.내가 사실,발생 시스템 site-packages
에 /usr/lib64
, 고 받아들이 대답하지 않았 작업에서 그 시스템입니다.
비슷한 사기꾼의 대답은,나의 솔루션 peeks 깊은 용기의 실행할 필터,경로를 찾아내는 실제로 주위에 전달되부 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
.
당신이 시도해야하는 명령을 결정하는 핍의 설치 위치
Python2
pip show six | grep "Location:" | cut -d " " -f2
Python 3
pip3 show six | grep "Location:" | cut -d " " -f2
면 이미 추가 PYTHONPATH
수도 있습니다 뭔가
import sys
print('\n'.join(sys.path))