我是新来的,希望得到一些帮助。
最近,我一直在使用 Jupyter 笔记本进行一些学习,在这种情况下,测试我从不同文件夹中制作的函数。
最初,结构如下如下:
/Main Folder
/ Library(containinng function)
Notebook
在这个结构中我可以做
from Library."file" import "function"
这总是有效
但是,当我开始将所有笔记本组织在这样的文件夹中
/Main Folder
/Library
some.py
/Notebook
some.ipynb
而相同
import
将无法工作并返回错误
Module not found: Library
所以我使用copilot来寻求帮助,它给了我这个片段
import sys
# Get the path to the 'library' folder
library_path = os.path.abspath(os.path.join(os.getcwd(), '..', 'library'))
# Append the 'library' folder to sys.path
if library_path not in sys.path:
sys.path.append(library_path)
现在,当我有这个时,如果我使用与提到的相同的
import
,它仍然无法工作,但是如果我使用|| |它工作得很好,我说好的,不用担心。
from "file" import "function"
所有这些都在 Vs 代码中。然而,在 Pycharm 上,我不需要执行任何操作,当我使用适用于 VsCode 的修复程序时,Pycharm 失败了。所以我认为当代码单元在笔记本中运行时路径的到达方式肯定有问题
但是在普通的python文件上,我可以简单地做
并且无论子文件夹如何,我都可以到达代码没有错误。
sys.path.append(os.path.abspath".")
任何帮助将不胜感激。谢谢
Any help would be appreciated. Thanks
你遇到的问题是 Python 模块搜索路径导致的。简单来说,当你使用
import
语句时,Python 会在特定路径列表中寻找你要导入的模块。这个路径列表存储在
sys.path
中。
问题根源:
- 工作目录: Jupyter Notebook 和 PyCharm 的工作目录可能与你期望的不同。这会导致相对路径导入出现问题。
-
相对路径:
from Library.file import function
是相对路径导入,它依赖于当前工作目录。
解决方案:
-
绝对路径导入:
最稳妥的方法是使用绝对路径导入。 你可以使用
sys.path.append(os.path.abspath(".."))
将上级目录添加到sys.path
,然后使用绝对路径导入:
```python import sys import os sys.path.append(os.path.abspath(".."))
from Library.file import function ```
-
修改
sys.path
(不推荐): 你可以直接修改sys.path
,将模块所在目录添加进去。但这种方法的可移植性较差,不推荐在正式项目中使用。 -
创建 Python 包: 将 "Library" 文件夹变成一个 Python 包,并在其中创建
__init__.py
文件。这样,Python 就会将其识别为一个包,你可以使用from Library.file import function
进行导入。
最佳实践:
- 使用 Python 包: 这是最规范、可移植性最好的方法。
- 避免相对路径导入: 尽可能使用绝对路径导入,避免因工作目录变化导致的导入问题。
- 理解工作目录: 在使用 Jupyter Notebook 或 PyCharm 时,务必了解当前的工作目录,以便正确设置导入路径。
希望以上解释能帮助你理解并解决问题。如果你还有其他疑问,请随时提出。
标签:python,visual-studio-code,jupyter-notebook,pycharm,importerror From: 78803438