在Jupyter Notebook中导入本地模块

29

关于导入本地创建的模块的一个非常基础的问题。

我无法导入一个本地创建的模块。该模块存在于当前工作目录中。

输入图像描述

输入图像描述

我有什么遗漏吗?


1
如果你的模块在一个文件夹中,你需要执行以下操作:from 文件夹名称.我的模块 import 人物 - innicoder
笔记本服务器的当前工作目录是您启动服务器的基本路径。那么,如果要导入模块,可以使用以下命令:import sys sys.path.append("您的模块路径") - Anon
它不在一个单独的文件夹中,要导入的模块和我调用或导入模块的笔记本位于同一路径上。 - Himanshu
我已经创建了一个环境变量PYTHONPATH,将当前工作目录设置为系统路径。如果我没有错的话,导入sys并执行sys.path.append("你的模块路径")也会达到同样的效果。 - Himanshu
2
我刚上传了一个.py文件进行导入,但是SO上的无数解决方案都没有解决我的问题。所以我回到了基础,并重新启动了内核。结果神奇地是,现在只需要一个简单的导入语句就可以按预期工作了。 - beluga
显示剩余3条评论
4个回答

7

我发现本地库的名称必须以大写字母开头。如果我将所有本地文件保存在名为Code的文件夹中,就可以导入它们;如果它被命名为code,那么我就不能导入。(子文件夹和子文件的名称似乎没有这种限制。)

这似乎是一种Jupyter的限制,而不是Python的限制——从命令行Python REPL中,我可以导入任何本地.py文件。


兄弟,我爱你啊。我一直在与一个导入问题斗争了数小时,真希望几个小时之前就发现了你的答案。 - Antonio Sesto
我知道那种感觉。今天我花了半个小时写一个错误报告,结果在提交时,验证器告诉我类似的问题已经存在,并且实际上已经在开发分支中解决了,而且之前已经提交了两次...不管怎样,很高兴能帮忙。 - Jeffrey Benjamin Brown

6
%%capture
%run myModule.ipynb

你将会得到myModule文件中定义的所有函数/变量。这也将覆盖你当前笔记本中的变量,但是……
from Mymodule import person

这也具有那种效果。

你确定运行以下代码- %%capture %run myModule.ipynb 也会导入变量吗?我认为不会。它只会导入函数。 - Pushp Sra

4
import os 
#if you want to know current working dir
os.getcwd()
#if you want to change
os.chdir('G:/a-2017-master')
# if you want to list dir
os.listdir()

['.DS_Store', '.gitignore', 'cs109a_hw0.ipynb', 'hwassets', 'Labs', 'Lectures', 'Midterms', 'Module.py', 'Projects', 'README.md', 'Sections', 'pycache']

这是一个关于IT技术的内容,包含文件和文件夹名称列表。其中pycache是一个缓存目录,用于加快Python代码的执行速度。

import os
import Module as m 
a = 10
b = 29
print(f"Addition of {a} and {b} : ",m.add(a,b))

0

这是来自W3schools教程的一个示例,用于在本地创建模块:

  1. 在conda环境keras中,创建了名为'cookie.py'的模块,并在同一路径下启动jupyter笔记本。然后创建一个名为“Importing_module_locally”的文件。

(keras) ninjawarrior@ninjas-MBP cookiecutter % pwd
/Users/ninjawarrior/miniconda3/environments_files/pythonbasics/Python_Tutorial_w3schools/mymodules/cookiecutter

确认模块和Jupyter笔记本文件在同一路径下。

(keras) ninjawarrior@ninjas-MBP cookiecutter % ls -lrt
total 16
-rw-r--r--  1 ninjawarrior  staff   46 Oct 12 12:47 cookie.py
drwxr-xr-x  3 ninjawarrior  staff   96 Oct 12 12:50 __pycache__
-rw-r--r--  1 ninjawarrior  staff  751 Oct 12 12:56 Importing_module_locally.ipynb

  1. 在cookie.py中输入以下内容

def greeting(name):
  print("Hello, " + name)

`

在 Import_module_locally 中输入以下内容:

import mymodule                  

mymodule.greeting("Jonathan")

结果:你好,Jonathan

希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接