繁体   English   中英

jupyter notebook 如何导入不在当前工作目录中的模块?

[英]How does jupyter notebook import modules which are not in the current working directory?

我试图了解导入在 jupyter notebook 中的工作原理。 我目前的工作目录是“home/username”。 我有三个 python 模块。

这些模块的路径名如下所示。

  1. "/home/username/module1.py"
  2. "/home/username/folder/module2.py"
  3. "/home/username/anaconda3/lib/python3.7/os.py" (这是一个内置的python模块)

Jupyter 笔记本:

单元格 1: import module1工作正常

单元格 2: import module2给出ModuleNotFoundError: No module named 'module2'

单元格 3: import os工作正常

似乎可以毫无问题地导入工作目录中的模块。 因此,可以导入module1.py 其他目录中非包的模块无法直接导入。 所以, module2.py会抛出一个错误。 但如果是这种情况,如何直接os.py ,它不是工作目录或同一目录下的另一个包中的?

这实际上更多地是关于 python 本身的工作原理。

您应该能够导入module2from folder import module2 您应该通过创建一个空白的初始化文件/home/username/folder/__init__py /home/username/folder声明为一个包。 我建议将包命名为更独特的东西,比如potrus_folder ,这样你就不会在生产线上出现命名冲突。

解释一下:Python 通过它的路径跟踪它有哪些可用的模块,它通常在你的环境变量中设置。 要查看它在哪些文件夹中查找模块,您可以执行import sys然后print(sys.path) 默认情况下,您的工作目录( /home/username/ )将被包含在内,具有最高优先级(因此它应该是sys.path第一个或最后一个,我不记得了)。 您可以使用sys.path.append('/some/folder')添加您自己的文件sys.path.append('/some/folder') ,尽管它不受欢迎,您应该真正将其添加到您的系统路径中,或者将其作为一个包保留在您的工作目录中。

包实际上只是已经添加的路径的子文件夹。 正如我之前解释的那样,您可以使用from X import Y语法访问它们,或者如果您想更深入地from XZ import Y 记住__init__.py文件。

os 库的路径在 environment* 中设置,每当您进行导入时,它都会搜索添加到您的环境中的所有目录 + pwd ,因此您只需将目录添加到环境中即可

默认情况下 /home/username/anaconda3/lib/python3.7/ 在安装时默认添加,因为大多数模块所在的位置,但您也可以添加 urs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM