가져올 수 있도록 내 파이썬 모듈을 어디에 두어야합니까?


89

나는 파이썬으로 내 자신의 패키지를 가지고 있으며 매우 자주 사용하고 있습니다. PYTHONPATH 또는 sys.path를 사용하지 않고 가져올 수 있도록 패키지를 넣어야하는 가장 우아하고 일반적인 디렉토리는 무엇입니까?

예를 들어 사이트 패키지는 어떻습니까? /usr/lib/python2.7/site-packages.
파이썬에서 패키지를 복사하여 붙여 넣는 것이 일반적입니까?


1
종속성과 그렇지 않은 것을 알려주는 setup.py를 만들고 더 나은 방법이며 더 이식 가능할 것입니다 ...하지만 예 일반적으로 복사 / 붙여 넣기가 잘 작동합니다 ... 일반적으로 "user / lib /"라는 추가 폴더를 만들지 만 "또는 뭔가 만들 단지 모두 거기 넣어 있는지의 내 PYTHONPATH에
Joran 비즐리

1
진짜 대답 : 나는 @JoranBeasley와 같은 개인용 간단한 스크립트 / 비 분산 패키지에 대한 다른 대답을 좋아하지 않습니다. runcom 트리 (예를 들어, 풋 스크립트 / 링크 ~/foo/bar/추가, export PYTHONPATH=~/foo/bar # fields separated by ":"사용자에게 ~/.bashrc파일). 을 참조하십시오 man python.이 수동 경로는 기본 Python 검색 경로보다 우선합니다. 이름 충돌에주의하십시오.

답변:


64

나는 일반적으로 사용자 사이트 디렉토리에 가져올 준비가 된 항목을 넣습니다.

~/.local/lib/pythonX.X/site-packages

플랫폼에 적합한 디렉토리를 표시하려면 다음을 사용할 수 있습니다. python -m site --user-site


편집 : sys.path생성 하면에 표시됩니다 .

mkdir -p "`python -m site --user-site`"

터미널에서 파이썬을 열 때 이것이 sys.path가 제공하는 것입니다. 로컬 [ '', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/ usr / lib64 / python2.7 / lib-tk ','/usr/lib64/python2.7/lib-old ','/usr/lib64/python2.7/lib-dynload ','/usr/lib64/python2.7 / site-packages ','/usr/lib64/python2.7/site-packages/PIL ','/usr/lib64/python2.7/site-packages/gst-0.10 ','/ usr / lib64 / python2. 7 / site-packages / gtk-2.0 ','/usr/lib/python2.7/site-packages ','/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg -info ']
Cobry

스크립트를 실행할 때 이것은 [ '/ home / username / Desktop / mypackage / Examples', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/ usr / lib64 /python2.7/plat-linux2 ','/usr/lib64/python2.7/lib-tk ','/usr/lib64/python2.7/lib-old ','/usr/lib64/python2.7/ lib-dynload ','/usr/lib64/python2.7/site-packages ','/usr/lib64/python2.7/site-packages/PIL ','/usr/lib64/python2.7/site-packages /gst-0.10 ','/usr/lib64/python2.7/site-packages/gtk-2.0 ','/usr/lib/python2.7/site-packages ','/usr/lib/python2.7/ site-packages / setuptools-0.6c11-py2.7.egg-info ']
Cobry

python -m site --user-site /home/username/.local/lib/python2.7/site-packages 그러나 이것은 sys.path에 속하지 않습니다 !!
Cobry

@Cobry python -m site --user-site는 생성해야 할 디렉토리를 알려줍니다. sys.modules실제로 만들 때까지 표시되지 않습니다 .
Aya

@mata 당신은 아마 변경해야 mkdir하는 mkdir -p중간 디렉토리를 만들 수 있습니다. 나는 심지어 ~/.local. ;-)
Aya

27

따라서 저와 같은 초보자와 디렉토리가 잘 구성되어 있지 않은 경우이 방법을 시도해 볼 수 있습니다.

파이썬 터미널을 엽니 다. 제 경우에는 numpy와 같은 작업을 아는 모듈을 가져오고 다음을 수행하십시오. Import numpy

numpy.__file__

결과적으로

'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'

결과는 numpy.__file__모듈 (제외 numpy/__init__.py) 과 함께 파이썬 파일을 넣어야하는 위치 입니다.

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages

이렇게하려면 터미널로 이동하여

mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"

이제 모듈을 가져올 수 있습니다.


내 Python에서 "._file_"이 작동하지 않는 이유는 무엇입니까? >>> import re >>> re._file_ Traceback (최근 호출 마지막) : 파일 "<pyshell # 10>", 줄 1, <module>에서 re._file_ AttributeError : 모듈 're'에 ' file ' 속성이 없습니다.
Urso

3
@Urso 밑줄 두 개를 사용하고 있습니까? 명령 re.__file__은 나를 위해 일했습니다.
arie64

그런 깨끗한 솔루션에 대해 @ arie64에게 감사드립니다. 나도 잘 했어 !!
BMS bharadwaj

감사합니다. 하지만 이상하게도 파일 탐색기에서 모듈을 보낸 디렉토리 / 폴더를 찾을 수 없습니다. 폴더가없는 것 같습니다. 폴더가 어디에 표시되지 않는지에 대한 아이디어가 있습니까? (나는 "숨겨진 항목 표시"를 활성화 했으므로 단순히 그게 아닙니다 ...)
Andre

7

이것은 나를 위해 작동하는 것입니다 (비공개 pip 저장소에 업로드되는 Python 패키지를 자주 만들어야 함). 질문에 대한 @joran의 의견에 대해 자세히 설명합니다.

  1. 패키지를 생성하기위한 작업 공간으로 사용되는 "빌드 디렉토리"를 생성합니다. 선택한 디렉토리는
  2. 거기에 파이썬 패키지 디렉토리를 복사하고 setup.py 파일을 만듭니다. 이것은 setup.py를 올바르게 만드는 데 도움 될 것입니다.
  3. 작업중인 프로젝트에 대한 virtualenv 를 만듭니다 . virtualenv에는 다른 많은 이점이 있습니다. 여기서는 자세히 설명하지 않습니다.
  4. 로컬 dist 패키지를 만듭니다 python setup.py sdist --format=tar. 생성 된 패키지는 이상적으로 dist폴더 에 있어야 합니다.
  5. virtualenv에 패키지를 설치합니다 (활성화 후). pip install <yourpackage>.tar

pip install --force-reinstall라이브러리를 더 많이 사용하고 dist 패키지를 다시 만들어야하는 경우 사용할 수 있습니다 .

이 방법이 저에게 효과적이라는 것을 알았습니다. 로컬이 아닌 다른 시스템에서 사용하기 위해 모듈을 패키징 할 필요가없는 경우이 방법은 과도 할 수 있습니다.

해피 해킹.


1

내 Mac에서는 sudo find / -name "site-packages". 그것은 나에게 같은 몇 가지 경로를했다 /Library/Python/2.6/site-packages, /Library/Python/2.7/site-packages하고 /opt/X11/lib/python2.6/site-packages.

그래서 v2.7이나 v2.6을 사용한다면 모듈을 어디에 둘지 알았습니다.

도움이 되었기를 바랍니다.


1

가져 오기 폴더는 다음 소스 코드를 추가하여 추출 할 수 있습니다.

import sys
print sys.path

자동 심볼릭 링크 생성 예는 다음과 같습니다.

ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`

"em"대신 "방금 설치했지만 파이썬이 볼 수 없습니다"다른 패키지를 사용할 수 있습니다.

아래에서 코멘트에서 요청 된 내용에 대해 자세히 설명하겠습니다.

다음 명령을 사용하여 python 모듈 em 또는 pyserial을 설치했다고 가정합니다 (예는 우분투 용).

sudo pip install pyserial

출력은 다음과 같습니다.

Collecting pyserial
  Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
    100% |████████████████████████████████| 194kB 2.3MB/s 
Installing collected packages: pyserial
Successfully installed pyserial-3.3

질문은 다음과 같습니다-파이썬은 pyserial 모듈을 볼 수 없습니다. 왜? 모듈이 설치된 위치는 파이썬이 특정 사용자 계정을 찾고있는 위치가 아니기 때문입니다.

해결책-pyserial이 파이썬이 찾고있는 경로에 도착한 경로에서 심볼릭 링크를 만들어야합니다.

symlink 생성 명령은 다음과 같습니다.

ln -s <what_to_link> <where_to_link>

정확한 위치를 입력하는 대신 명령을 실행하여 모듈을 저장 한 위치를 pip에 요청합니다.

pip show pyserial | grep "Location"| cut -d " " -f2

정확한 위치를 입력하는 대신 명령을 실행하여 설치되는 모듈을 찾는 위치를 Python에 요청합니다.

python -m site --user-site

두 명령 모두 "`"문자로 이스케이프해야합니다 (일반적으로 미국 키보드의 경우 1 버튼 왼쪽에 있음).

결과적으로 ln에 대해 다음 명령이 제공되고 누락 된 심볼릭 링크가 생성됩니다.

ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages 

또는 배포판 및 python / pip 기본값에 따라 비슷한 것입니다.


강력한 한 줄짜리 같은데 ... 리눅스 초보자들에게 조금 설명해 주시겠습니까? 사람들은 이해하지 못하는 것을 사용하는 것을 경계 할 수 있습니다. :-)
pianoJames

-1

모듈을 개발하고 있다면 이것을 따르는 것이 좋습니다.

import sys
sys.path.append("/home/mylinux/python-packages")

이제 당신이 계속 어떤 모듈 python-packages로 가져올 수 있습니다 Python-interpreter.

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