【问题标题】:Jupyter notebook - can't import python functions from other foldersJupyter notebook - 无法从其他文件夹导入 python 函数
【发布时间】:2018-10-13 18:40:25
【问题描述】:

我有一个 Jupyter 笔记本,我想使用计算机中其他文件夹中的本地 python 函数。 当我导入这些函数时,我收到此错误: "ModuleNotFoundError: 没有名为 'xxxxxxxxxxxxxx' 的模块

  • 我使用 anaconda 作为 python 解释器

【问题讨论】:

    标签: python jupyter-notebook


    【解决方案1】:

    看,在 python 2.7 上它会工作,但在 python 3 上你会遇到一些错误......

    如果你在其他文件中写了一些函数,你需要导入这个文件。如果这个文件在同一个文件夹中- 很好。但是如果在子文件夹中...在子文件夹中,您需要创建空文件 init.py
    现在,如果您尝试从子文件导入您的模块 - 也可以工作

    无能为力(适用于 python 3)
    使用此代码

    import os
    import sys
    
    sys.path.append(os.getcwd() + '/modules')
    import my_module

    【讨论】:

    • 这是我答案的精确副本?你能指出有什么不同吗?
    • 不同之处在于,你使用常量 path_to_file,我使用动态 path_to_file。我知道我使用子文件夹,但我不知道我的程序是否在 PC 上。你的变种也很好。如果知道 PC 上的 path_to_file 可以提供帮助
    【解决方案2】:

    您可以使用sys 将路径添加到本地模块/python 文件中。

    import sys
    sys.path.append("/path/to/file/")  # path contains python_file.py
    
    import python_file
    

    如果您想通过将模块添加到 Anaconda 路径来获得更持久的解决方案,请参阅之前来自 cord-kaldemeyer https://stackoverflow.com/a/37008663/7019148 的回答。为完整起见,复制以下内容:

    我在 Anaconda 论坛中找到了我的问题的两个答案:

    1.) 将模块放入站点包中,即始终打开的目录 $HOME/path/to/anaconda/lib/pythonX.X/site-packages 系统路径。这也应该通过创建符号链接来工作。

    2.) 将 .pth 文件添加到目录 $HOME/path/to/anaconda/lib/pythonX.X/site-packages。这个可以命名 任何东西(它必须以 .pth 结尾)。 .pth 文件只是一个 以换行符分隔的目录的完整路径名列表 将在 Python 启动时添加到您的路径中。

    两者都很简单,我选择了第二个选项 更灵活。

    ***更新:

    3.) 在包的文件夹中创建一个 setup.py 并使用 pip install -e /path/to/package 安装它,这是最干净的选项 从我的角度来看,因为您还可以看到所有安装使用 点子列表。

    还是谢谢!

    【讨论】:

    • 添加到上面的答案。
    • 感谢 TD-Asker。当我使用第三个选项时,我收到以下消息:“C:\rnd\ErezLaxBranch\python\GeometricUtils 中没有文件/目录(来自 PKG-INFO)”知道问题出在哪里吗?
    • 请报告什么选项是最好的,我可以在我的回答中为未来的访问者强调这一点。
    • 再次您好,感谢您的帮助。我现在正在尝试所有选项,但没有成功。我的情况是我有 2 个文件夹,里面有 .py 文件,文件夹中的一些文件从其他文件夹导入功能等等。我怎样才能将这两个文件夹包含在内他们的文件在路径中?
    • 您只需将这两个文件夹都添加到您的系统路径中。如果你为每个文件夹都这样做,#1 或 #3 应该可以工作。
    【解决方案3】:

    如果您还没有,请尝试在代码中使用函数的完整路径名。

    from Folder1.Folder2.FileName import ModuleName
    
    someVar = ModuleName(params)
    

    Folder1 将是与您的主程序位于同一目录中的文件夹。 此外,在您导入的每个文件夹中创建一个名为 __init__.py 的空文件。

    【讨论】:

    • 好的。谢谢。它有点帮助。但是有什么方法可以将特定路径添加为永久模块?就像我向 anaconda 添加新包一样?
    • TD-Asker 的回答可能是解决这个问题的方法。
    • 它以前工作过,现在不行了。 Jupyter 可能会感到困惑,所以在这种情况下,我不得不重新启动工作簿
    猜你喜欢
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多