2016-08-24 1106 views
16

我在使用Python 3.4.2和 的Jupyter Notebook服务器(v4.2.2)我想使用全局名称__file__,因为笔记本将从其他用户克隆,并在一个节我要运行:__file__不存在于Jupyter笔记本

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参数是一个相对或绝对路径,并返回path绝对版本。所以我可以稍后安全地使用返回的path

,但我得到

NameError: name '__file__' is not defined

我搜索了这个错误在网上发现了“解决方案”,我应该更好地利用sys.argv[0],但print(sys.argv[0])回报

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

但正确的笔记本电脑的位置误差应该是/home/ubuntu/notebooks/

感谢参考How do I get the current IPython Notebook name从马亭皮特斯(评论)最后的答案(不接受)适合适合我的需求:

print(os.getcwd())

/home/ubuntu/notebooks

+1

'__file__'适用于*模块和Python脚本*,而不是笔记本电脑。你找到的答案在这里不适用。 –

+3

[如何获取当前的IPython Notebook名称](http://stackoverflow.com/q/12544056)看起来更相关? –

回答

3

这是不可能得到的路径笔记本。您可能会找到一种方法来获取它只能在一个环境中工作(例如os.getcwd()),但如果以不同方式加载笔记本计算机,则不一定有效。

相反,尝试写笔记本,以便它不需要知道自己的路径。如果做了像获得密码那样的事情,那么一定要快速失败/如果这不起作用,则打印一个错误,而不要默默地尝试继续。

参见:https://github.com/ipython/ipython/issues/10123