2016-07-07 20 views
6

내 모든 .py 파일은 폴더 스크립트 안에 있고 내 모든 IPython- 노트는 Notebook 폴더 아래 있습니다.IPython을위한 기본 sys.path 설정하기

스크립트의 하나 이상의 파일에서 각 노트북 파일에 대해 여러 가지 상호 종속성이 있습니다.

모든 노트북 상단에 sys.path.append을 두는 것이 번거롭고 PYTHONPATH.bash_profile에 추가하는 것처럼 기본 검색 경로를 추가 할 수 있기를 바랍니다. 이제

나는 다음을 수행하십시오

import DeriveFinalResultSet as drs 
+0

을하지만, 아마도 당신은 사용자 지정 파일에 추가 할 수 있습니다 https://ipython.org /ipython-doc/2/config/intro.html#setting-configurable-options – mgilson

+0

또는 주어진 스크립트에서'ipython'을 호출하기 전에 PYTHONPATH로 간단한 bash 스크립트를 생성 할 수 있습니다 ... – mgilson

+0

@mgilson : 업데이트했습니다. bash_profile을 사용하고 원하는 디렉토리를 가리 키도록 PYTHONPATH를 지시했습니다. 그리고 콘솔에서'jupiter-notebook '을 실행하고 트릭을 수행하는 것 같습니다. 나는 아래 답변을 게시하고 있습니다. 가능하면 올바른지 확인할 수 있습니까? –

답변

7

은 당신이 설명처럼, 나는 다음과 같은 일을 할 "숨겨진 구성"및 노트북/코드 분리를 유지하기 위해 (소스 제어/기계 별에없는, 즉 일)를 피하려면 paths.py에서
code/ 
    mymodule.py 
    mypackage/ 
     __init__.py 

notebooks/ 
    mynb.ipynb 
    mynb2.ipynb 
    paths.py <--- below 

: mynb*.ipynb에서 다음

import sys 
import pathlib 
sys.path.insert(0, str(pathlib.Path(__file__).parents[1]/'code')) 
# sys.path[0] = str(pathlib.Path(__file__).parents[1]/'code') 

나는 행복하게 할 수 있습니다

import paths 
import mymodule, mypackage 

후자의 형태로 효과적으로 아마도 조금 청소기 인 "코드"디렉토리에 빈 문자열 (현재 디렉토리)에서 수입 경로를 대체합니다. 따라서 수입품은 os.chdir()과 같은 것을 사용하는 것에 대해 둔감합니다.

+0

좋은 답변입니다. 어쩌면'pathlib.Path(). resolve(). parent'를 사소한 정교화로 사용할 수 있을까요? – aparkerlue

0

을 내가 트릭을 할해야 .bash_profilePYTHONPATH을 변경 실현되는 몇 가지 조사 후 :

import sys 
sys.path.append("<path where DeriveFinalResultSet.py exists>) 
import DeriveFinalResultSet as drs 

은 내가 아래 할 수있는 설정을 할 . 여기

내가 확인하려면 내 .bash_profile

PYTHONPATH="<path where DeriveFinalResultSet.py exists>:$PYTHONPATH" 
export PYTHONPATH 

에 추가 된 두 줄 수 있습니다, 나는 신선한 IPython 노트북을 연 후 다음했다.

:
import sys 
print(sys.path) 
['', '**<path where DeriveFinalResultSet.py exists>**', '<some path>Google Drive/Project/AnimalPhotoBias/Notebooks', '<some path>anaconda/lib/python35.zip', '<some path>anaconda/lib/python3.5', '<some path>anaconda/lib/python3.5/plat-darwin', '<some path>anaconda/lib/python3.5/lib-dynload', '<some path>anaconda/lib/python3.5/site-packages/Sphinx-1.3.5-py3.5.egg', '<some path>anaconda/lib/python3.5/site-packages/setuptools-20.3-py3.5.egg', '<some path>anaconda/lib/python3.5/site-packages', '<some path>anaconda/lib/python3.5/site-packages/aeosa', '<some path>anaconda/lib/python3.5/site-packages/IPython/extensions', '<some path>.ipython'] 
+1

이렇게하면됩니다. 'PYTHONPATH = "... : $ {PYTHONPATH}"' – mgilson

+0

@mgilson : 투표 해 주셔서 감사합니다! 좋은 날! –

+2

아마도 'bash_profile'은 아마도 그러한 설정을위한 최고의 장소가 아닙니다. 두 개 이상의 프로젝트가 있다면이 접근법은'PYTHONPATH'에 너무 많은 추가 경로를 추가하여 이름 충돌을 일으킬 수 있습니다. – maxkoryukov

2

내가 Jupyter 경로를 업데이트하고 실행 간단한 bash는 스크립트 작성 : 내가 여기에 답을 모르는

#!/usr/bin/env bash 

echo "Saving PYTHONPATH" 
ORIGINAL_PYTHONPATH=$PYTHONPATH 
echo "Prepending package to PYTHONPATH" 
export PYTHONPATH="$PWD/:$ORIGINAL_PYTHONPATH" 
echo "Starting Jupyter" 
jupyter notebook 
echo "Reverting to the original PYTHONPATH" 
export PYTHONPATH=$ORIGINAL_PYTHONPATH