여기에도 비슷한 질문이 많이 있지만 내 프로젝트에 가장 적합한 것이 무엇인지 알 수 없습니다. 이후 (루트 디렉토리에있는 메이크 이후 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을 사용합니다.
비록 중복 될 수 있지만, 예를 들어 필요한 모든 정보가 지정되도록 여러 가지 "일관성 검사"를하고 싶기 때문에이 클래스를 만듭니다. – Jhonny
config.py에서 Configuration 클래스를 만들려면 "src.config import Configuration"에서 작동해야합니다. 그러나 'src'라는 이름을 프로젝트와 관련된 다른 이름으로 바꾸려면 프로젝트 이름을 다시 사용하는 것이 좋습니다. 수입이보다 명확하게 정의되고 모호함이 줄어 듭니다. 또한 Nils Werner의 가이드 라인을 따라 setup.py를 만들 것을 제안합니다. https://docs.python.org/2/distutils/setupscript.html –