2016-08-05 1 views
0

여기에도 비슷한 질문이 많이 있지만 내 프로젝트에 가장 적합한 것이 무엇인지 알 수 없습니다. 이후 (루트 디렉토리에있는 메이크 이후 data_management (원시 데이터를 준비하기 위해) 및 analysis, 또는 각각 자신의 하위 디렉토리에 앉아 여러 스크립트를 실행 중소 데이터 과학 프로젝트에서 절대 경로로 가져 오기

project-name/ 
    docs/ 
    src/ 
     __init__.py 
     config.yml 
     Makefile 
     data/ 
     data_management/ 
      __init__.py 
      process1.py 
      process2/ 
     analysis/ 
      __init__.py 
      analysis1.py 
      analysis2/ 
     library/ 
      __init__.py 
      config.py 
: 이것은 다음과 같은 방법으로 조직 된 작은 데이터 연구 프로젝트입니다 일부 프로세스는 매우 광범위합니다.

각 모듈은 자체 포함되어 있습니다. 제외하고는 모두 library 디렉토리의 기능/클래스를 가져오고 공유합니다 (필자는 자체 포함 모듈의 원칙을 위반하는 것은 피해야한다고 읽었지만 나는 알지 못했습니다.) functinos를 복사하지 않고 그것을 해결하는 방법). 나는이 스크립트의 각 절대 수입 경로를 가질 수 있다면 가장 찾을 : 한 가지 예는

문제 (데이터베이스 정보, 관련 하위 디렉토리에 대한 경로, 다른 사용자 사양 등을 관리) config.py 내 구성 클래스 , 즉 프로젝트에 import library.config을 쓸 수 있다면. 그러나이의 상단 또는 다른 스크립트 (내 "경로 관리 시스템"에 접근하기 위해, 내가 경로를 지정하는 문제로 실행되기 때문에)에

# project-name/src/data_management/process1/data_to_sql.py  
import os 
import sys 
sys.path.insert(0, os.path.abspath('..')) 
import library.config 
config = library.config.Configuration() 

이 잘못 느낀다.

질문 : 어떤 파일에서 sys.path.insert을 피할 수 있습니까? PYTHONPATH을 수정하지 않아야합니까? 그렇지 않다면 makefile에서이 설정을 자동화 할 수 있습니까? (궁극적으로이 코드를 다른 사람들과 공유하기를 원합니까?)

감사합니다.

편집 : 저는 Python 2.7.11을 사용합니다.

답변

0

몇 가지 포인트 :이 파이썬 2.7의 경우

  1. 당신은 수입 할 수 있도록 각 디렉토리에 __init__.py이 있어야합니다. 파이썬 3에는 필요 없습니다.
  2. 메이크 파일은 src에서 실행되기 때문에 가져 오기의 기반이됩니다. 각 스크립트에는 sys.path.insert(0, '.')이 필요하며 from analysis.analysis1 import foo, bar이 있으면 자유롭게 사용할 수 있습니다.
  3. PYTHONPATH에서 배포, 설치 및 호출 할 수 있도록 스크립트를 패키지하는 권장 방법은 https://github.com/pypa/sampleproject을 확인하십시오. python -c 'import mypackage을 실행하여
0

config 파일에 대해 썼다면 'config.py'라고 적었습니다. 그러나 코드에서 그것은 .yml 파일 인 것 같습니다.

당신이 평 파일을 사용하기로 선택한다면, 당신은이 방법에 액세스 할 수 있습니다 :

from src import config 
+0

비록 중복 될 수 있지만, 예를 들어 필요한 모든 정보가 지정되도록 여러 가지 "일관성 검사"를하고 싶기 때문에이 클래스를 만듭니다. – Jhonny

+0

config.py에서 Configuration 클래스를 만들려면 "src.config import Configuration"에서 작동해야합니다. 그러나 'src'라는 이름을 프로젝트와 관련된 다른 이름으로 바꾸려면 프로젝트 이름을 다시 사용하는 것이 좋습니다. 수입이보다 명확하게 정의되고 모호함이 줄어 듭니다. 또한 Nils Werner의 가이드 라인을 따라 setup.py를 만들 것을 제안합니다. https://docs.python.org/2/distutils/setupscript.html –

3

당신은 project-namesetup.py 파일을 만들어 프로젝트에서 패키지를 만들 수 있습니다.그 후 당신은 당신이

from __future__ import absolute_import 

당신이

같은 import 문을 수행 할 수 있습니다 할 경우,
pip install -e project-name/ 

사방에서 파이썬 환경에서

당신이 다음 또한

import project_name 
import project_name.library.config 

을 할 수있는 할 수있는

from ..library import config 

sentially 가져 오기 ../library/config.py

+0

이것은'import src.library.config '이어야하므로 내 프로젝트 구조에 맞지 않습니다. 그래도 고마워. – Jhonny

+0

[당신에게 달려 있으며'setup.py'에 넣은 것에 달렸습니다. (https://setuptools.readthedocs.io/en/latest/setuptools.html). 'src /'의 내용은'import project_name.src' 또는'import project_name'에서 끝날 수 있습니다. –

관련 문제