2013-05-29 3 views
3

나는 pip를 통해 다른 프로젝트에 포함될 라이브러리를 구축 중입니다.동일한 프로젝트의 bin 디렉토리에서 모듈을 가져올 수 없습니다.

나는 다음과 같은 디렉토리가 ('venv'는 VIRTUALENV입니다) :

project 
    \- bin 
    \- run.py 
    \- myproj 
    \- __init__.py 
    \- logger.py 
    \- venv 

나는 VIRTUALENV을 활성화합니다. 빈/run.py에서

내가 가진 :

from myproj.logger import LOG 

하지만 난 항상 얻을

ImportError: No module named myproj.logger 

'프로젝트'디렉토리의 다음 작품 :

python -c "from myproj.logger import LOG" 

그것은 아니다 'bin'디렉토리에서 호출 될 때 'project'디렉토리를 pythonpath에 올바르게 추가하십시오. 내 bin 디렉토리의 스크립트에서 'myproj'모듈을 가져올 수 있습니까?

답변

5

가장 간단한 해결책은 상위 폴더를 검색 가능한 경로로 가져 오기 위에 추가하는 것입니다.

import sys,os 
sys.path.append(os.path.abspath('..')) 
from myproj.logger import LOG 
+0

감사합니다. 나는 전에 그것을 보지 못했다. – user1491250

+2

OP에서 virtualenv를 사용합니다. 'sys.path' 조작은 [불필요한] (http://stackoverflow.com/a/16816683/4279) 또는 [유해한] (http://stackoverflow.com/a/14186074/4279)입니다. – jfs

+1

스크립트의 절대 경로를 사용하여 어디서든 스크립트를 실행할 수 있습니다. 'sys.path.append (os.path.join (os.path.dirname (sys.argv [0]), '..'))' –

0

현재 작업 디렉토리 만 종속성을 해결하는 데 사용되는 PYTHONPATH 안에 있습니다. 따라서, 빈 안에 있고 스크립트를 실행하면 프로젝트가 더 이상 경로에 없습니다. 환경 변수에 추가하거나 프로그래밍 방식으로 sys.path 목록을 편집하여 PYTHONPATH에 프로젝트를 추가하는 일반적인 방법 중 하나를 사용해야합니다 (다른 대답에 나와 있음).

6

myprojectvenv virtualenv에 설치하십시오. sys.path 해킹없이 환경이 활성화되는 동안 bin/run.py을 포함한 모든 스크립트에서 myproject을 가져올 수 있습니다.

는 설치 myproject 패키지 project/setup.py를 작성하고 VIRTUALENV이 활성화되어있는 동안 project 디렉토리에서 실행하려면 : (즉시 myproject를 다시 설치하지 않고 myproject 모듈의 변화에 ​​볼 수 있습니다) 그것은 myproject 인플레 이스를 설치합니다
$ pip install -e . 

가 .

+1

OP가 virtualenv를 사용하고 있다면 이것은 허용 된 대답이어야합니다 . – kkurian

0

PYTHONPATH에 프로젝트 경로를 추가하십시오.

관련 문제