2016-08-24 5 views
16

노트북이 다른 사용자와 하나에 복제 될 때문에, 파이썬 3.4.2 나는 글로벌 이름 __file__을 사용하려면 와 Jupyter Notebook 서버 (v4.2.2)에있어 path PARAM은 상대 또는 절대 경로와 path의 절대 버전을 반환하는 경우__FILE__은 Jupyter 노트북에 exisit하지 않습니다

def __init__(self, trainingSamplesFolder='samples', maskFolder='masks'): 
    self.trainingSamplesFolder = self.__getAbsPath(trainingSamplesFolder) 
    self.maskFolder = self.__getAbsPath(maskFolder) 

def __getAbsPath(self, path): 
    if os.path.isabs(path): 
     return path 
    else: 
     return os.path.join(os.path.dirname(__file__), path) 

__getAbsPath(self, path) 검사 : 섹션 난 실행해야합니다. 그래서 나중에 path을 안전하게 사용할 수 있습니다.

하지만 내가 온라인이 오류를 검색하고, 내가 더 잘 sys.argv[0]을 사용한다 "솔루션"하지만 print(sys.argv[0]) 반환

/usr/local/lib/python3.4/dist-packages/ipykernel/__main__.py

그러나 올바른 노트북의 위치를 ​​발견

NameError: name '__file__' is not defined

오류를 얻을 /home/ubuntu/notebooks/이어야합니다. 참조 마티 피에 터스에서 How do I get the current IPython Notebook name (댓글) (접수하지 않음) 마지막 답변

덕분에 나의 요구에 완벽하게 맞는 :

print(os.getcwd())

/home/ubuntu/notebooks

+1

'__file__'이 *가 아닌 노트북에 * 모듈과 파이썬 스크립트에 적용됩니다. 발견 한 답변은 여기에 적용되지 않습니다. –

+3

[현재 IPython 노트 이름을 얻는 방법] (http://stackoverflow.com/q/12544056) 더 관련성이있어 보입니까? –

답변

3

그것은 경로를 얻을 수는 없습니다 노트북. 하나의 환경에서만 작동하는 방법을 찾을 수 있지만 (예 : os.getcwd()) 노트북이 다른 방식으로로드 된 경우에는 작동하지 않습니다.

대신 자신의 경로를 알 필요가 없도록 전자 필기장을 작성하십시오. pwd를 얻는 것과 같은 일을하는 경우, 계속 작동하지 않는다면 오류가 발생하지 않도록 빨리 실패하거나 오류를 인쇄하십시오.

은 참조 : https://github.com/ipython/ipython/issues/10123

관련 문제