tutorial notebook lab ipynb examples python-3.x path jupyter

python-3.x - notebook - jupyter r



__file__ no existe en Jupyter Notebook (2)

Estoy en un servidor Jupyter Notebook (v4.2.2) con Python 3.4.2 y quiero usar el nombre global __file__ , porque el notebook será clonado por otros usuarios y en una sección tengo que ejecutar:

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)

El __getAbsPath(self, path) comprueba si un __getAbsPath(self, path) es una path relativa o absoluta y devuelve la versión absoluta de la path . Así que puedo usar el path devuelto con seguridad más tarde.

Pero me sale el error

NameError: el nombre ''__file__'' no está definido

Busqué este error en línea y encontré la "solución" que debería usar sys.argv[0] , pero print(sys.argv[0]) devuelve

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

Pero la ubicación correcta del cuaderno debe ser /home/ubuntu/notebooks/ .

Gracias por la referencia ¿Cómo obtengo el nombre actual de IPython Notebook de Martijn Pieters (comentarios) la última respuesta (no aceptada) se ajusta perfectamente a mis necesidades:

print(os.getcwd())

/ home / ubuntu / notebooks


En Python moderno (v3.4 +) podemos usar pathlib para obtener el directorio del portátil:

from pathlib import Path cwd = Path().resolve() # cwd == PosixPath(''/path/to/this/jupyter/server''s/root/directory/'')


No es posible conseguir el camino al cuaderno. Es posible que encuentre una forma de obtenerlo que solo funcione en un entorno (por ejemplo, os.getcwd() ), pero no funcionará necesariamente si el portátil se carga de una manera diferente.

En su lugar, intente escribir el cuaderno para que no necesite conocer su propio camino. Si está haciendo algo como obtener el pwd, entonces asegúrese de fallar rápidamente / imprimir un error si esto no funciona, en lugar de simplemente intentar continuar en silencio.

Consulte también: https://github.com/ipython/ipython/issues/10123