2013-04-08 4 views
2

내가 사용할 수 있어야 제안하는 것 이전 답변을 통해 검토 한 시도 상대 가져 오기를 최상위 패키지 넘어액세스는 파이썬 상위 폴더

이것은 작동하지 않는 것 같지만. 내가 사용 스크레이퍼로드 협의회에서 수 있어요

scraper/ 
    __init__.py 
    bot/ 
      scraper.py 
      __init__.py 
      wigan/ 
        council.py 
        __init__.py 

: 다음과 같이 내 파일 구조가

from wigan import council 

회의에서 생각을, 다음 작업 중 어느 것도 scraper.py을로드하려고하지 않을 때 :

from .. import scraper 
from scraper.bot import scraper 
from scraper.bot.scraper import scraper 

도움이 될 것입니다. 감사합니다 :-)

+0

어떤 종류의 오류가 발생합니까? 예외, 경고 또는 아무것도 없습니까? – J0HN

+0

ImportError 내가 사용할 때 scraper.bot, ValueError를 할 때 .. – Patrick

+0

scraper 폴더를 'site-packages'나'import sys; print (sys.path)'를 호출하고 import 문을 다시 시도하십시오. – User

답변

0

내가 갖고있는 문제는 패키지에있는 스크립트를 실행하고 있다는 것입니다. 이것은 파이썬에서 가장 어색하게 지원되는 기능 중 하나입니다. 스크립트를 직접 실행하면 현재 경로가 파이썬 검색 경로의 시작 부분에 놓입니다. 당신이 패키지의 내부에 있다면, 이것은 틀린 것이다.

제대로 실행하려면 scrapper.py (해당 스크립트 인 경우) 최상위 폴더 (무엇이든간에 scrapper/)로 변경 한 다음 python -m scrapper.bot.scrapper을 실행하십시오. 당신이, 또는 site-packages 폴더에 (또는 적절한 .pth 파일)을 설치하여 파이썬 검색 경로로, 어느 PYTHONPATH 환경 변수를 사용하여 해당 최상위 폴더를 추가하는 경우

또는, 현재 디렉토리 제한 될 것 편안하고 어디서든 스크립트를 실행할 수 있습니다.

모듈을 다른 모듈의 이름으로 가져 오는 경우 모듈을 스크립트로 실행하는 데는 다른 문제가 있습니다. 스크립트는 실제 이름이 아닌 __main__으로 가져옵니다. 이름으로도 가져 오면 스크립트의 두 번째 사본을 얻게됩니다. 의도 한대로 작동하지 않을 수도 있습니다 (모듈에 전역 상태가있는 경우 복사본간에 일관성이 없음). 이것은 종종 스크립트가 가능한 한 적은 작업을 수행 할 것을 제안하는 한 가지 이유입니다. 다른 모듈에서 무언가를 가져 와서 실행하면됩니다. 이 작업을 수행하기 위해 코드를 리팩터링 할 수도 있습니다.