2013-04-24 2 views
44

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

예를 들어 사이트 패키지는 어떻게됩니까? /usr/lib/python2.7/site-packages.
python에서 패키지를 복사하여 붙여 넣는 것이 일반적입니까? 당신이 python -m site --user-site


편집을 사용할 수 있습니다

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

는 해당 플랫폼에 대한 올바른 디렉토리를 표시하려면 :

+1

의존성을 알려주는 setup.py를 만들고 그렇지 않은 것이 더 나은 방법이며 더 많은 이식성이 될 것입니다 ...하지만 일반적으로 복사/붙여 넣기는 정상적으로 작동합니다 ... 일반적으로 "user/lib/"또는 무엇인가를 입력하고 거기에 모든 것을 넣고 그 값을 확인하십시오. PYTHONPATH –

+1

REAL : @JoranBeasley와 같은 개인적인 간단한 스크립트/비공개 패키지에 대한 다른 답변을 좋아하지 않습니다. 보관할 폴더를 만드십시오. 당신의 스크립트를 (또는 그들에 대한 링크를) 넣고, 그 폴더를 bash runcom 트리에서 PYTHONPATH에 추가하십시오 (예 :'~/foo/bar /'에 스크립트/링크 넣기),'export PYTHONPATH = ~/foo/bar # fields ':/.bashrc' 파일에 ":"로 구분). 'man python'을 보자.이 수동 경로는 기본 파이썬 검색 경로 앞에있다. 이름 충돌에주의하십시오. – 5upa

답변

31

나는 보통 내가 사용자 사이트 디렉토리에 가져올 준비 할 재료를 넣어 :이를 생성하면 sys.path에 표시됩니다.

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

터미널에서 파이썬을 열면 sys.path가 제공합니다. 로컬 '', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/ usr/lib/lib64/python2.7/lib-tk ','/usr/lib64/python2.7/lib-old ','/usr/lib64/python2.7/lib-dynload ','/usr/lib64/python2.7/사이트 패키지 ','/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

+0

스크립트를 실행하면 ['/ 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 /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- 패키지 ','/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info '] – Cobry

+0

파이썬 -m 사이트 - 사용자 - 사이트 /home/username/.local/ lib/python2.7/site-packages 그러나 이것은 sys.path에 없습니다! – Cobry

10

자신과 당신의 디렉토리와 같은 초심자가 잘 조직되어 있지 않다면이 방법을 시도해보십시오.

python 터미널을 엽니 다. 제 경우 엔 numpy와 같이 작동하는 것으로 알고있는 모듈을 가져오고 다음을 수행하십시오.

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

결과 Import numpy

numpy.__file__

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"

지금 당신은 당신의 모듈을 가져올 수 있어야 입력 수행합니다.

+0

가장 간단한 해결책, 고마워요. – Sarang

+0

어떻게 내 파이썬에서 "._file_"은 효과가 없었습니까? >>> >>> re._file_ 역 추적 (마지막으로 가장 최근 통화) 다시 수입 : 더 속성 '_file_' – Urso

+1

이 없습니다 '재'모듈 : re._file_ AttributeError에서 파일 "", 라인 1, @ 하위 2 개의 밑줄을 사용하고 있습니까? 're .__ file__' 명령이 저에게 효과적이었습니다. – arie64

4

이것은 나를 위해 일하는 것입니다. (나는 자주 private pip 저장소에 업로드되는 python 패키지를 만들어야합니다.) @joran이 질문에 대해 언급 한 내용을 자세히 설명합니다.

  1. 패키지를 만들기위한 작업 공간으로 사용되는 "빌드 디렉토리"를 만듭니다. 원하는 디렉토리에
  2. python 패키지 디렉토리를 복사하고 setup.py 파일을 만듭니다. this은 setup.py를 올바르게 작성하는 데 도움이됩니다.
  3. 작업중인 프로젝트에 대해 virtualenv을 만듭니다. virtualenvs에는 다른 이득의 낱단이있다, 나는 세부 사항으로 여기 들어가지 않을 것이다.
  4. 로컬 배포 패키지 python setup.py sdist --format=tar을 만듭니다. 만든 패키지는 이상적으로 dist 폴더에 있어야합니다.
  5. virtualenv에 패키지를 설치하십시오 (활성화 한 후).더 라이브러리 함께 놀러와 DIST 패키지를 다시 작성해야하는 경우 pip install <yourpackage>.tar

당신은 pip install --force-reinstall를 사용할 수 있습니다.

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

해피 해킹.

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
예 :

ln -s`pip show em | grep "위치"| "-f2"python -m site --user-site`

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

아래의

아래의 코멘트에서 자세한 내용을 설명 드리겠습니다.

은 다음 명령 (예 우분투위한)와 파이썬 모듈 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이 도착한 경로에서 Python이 찾는 경로로 심볼릭 링크를 만들어야합니다.

심볼릭 링크 생성 명령은 다음과 같습니다

ln -s <what_to_link> <where_to_link> 

대신에 우리가 그것을 실행 명령으로 모듈을 저장 위치를 ​​우리에게 얘기를 핍을 요구하는 정확한 위치를 입력하는 :

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

대신 정확한 위치를 입력 우리 명령을 실행하여 설치된 모듈을 찾는 위치를 파이썬에게 묻습니다 :

python -m site --user-site 
:

두 명령은 명령 다음과 같은 결과에

은 LN 제공되고 누락 된 심볼릭 링크가 생성 될 것입니다 (일반적으로 미국의 키보드에 대한 1 개 버튼의 왼쪽에있는) "`"문자로 이스케이프해야합니다

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

또는 유사 항목 (배포판 및 Python/pip 기본값에 따라 다름).

+0

강력한 원 - 라이너처럼 보입니다 ... 리눅스 초보자를 위해 약간 설명 할 수 있습니까? 사람들은 이해하지 못하는 것을 사용하는 것을 조심해야 할 수도 있습니다. – pianoJames

관련 문제