Python 从文件导入模块不起作用
我正在运行一个jupyter笔记本文件(file.ipynb),并试图从文件夹“utils”中的python文件“gradient\u check”导入模块“eval\u numerical\u gradient”。但是,以下代码不起作用Python 从文件导入模块不起作用,python,Python,我正在运行一个jupyter笔记本文件(file.ipynb),并试图从文件夹“utils”中的python文件“gradient\u check”导入模块“eval\u numerical\u gradient”。但是,以下代码不起作用 from utils.gradient_check import eval_numerical_gradient 然后,我尝试使用以下代码: import sys sys.path.append("/Users/W/dlp/src/03/utils") im
from utils.gradient_check import eval_numerical_gradient
然后,我尝试使用以下代码:
import sys
sys.path.append("/Users/W/dlp/src/03/utils")
import gradient_check
from gradient_check import eval_numerical_gradient
我的问题是,上面两种方法的区别是什么,是否可以让第一个代码工作?仅仅因为您将它放在文件夹
utils
下,并不会使utils
成为一个包。如果要将其定义为模块
,则需要文件夹utils
下的\uuuu init\uuuuuuuuuuuuuuuuuupy
文件
\uuuu init\uuuuu.py
:(将其放在utils文件夹下)
file.ipynb
:
import sys
sys.path.append("/Users/w/dlp/src/03")
from utils import eval_numerical_gradient
第二个不依赖于
utils
是一个包。如果有其他的东西叫做“utils”,它也会起作用。谢谢!我猜第一个并不认为UTIL是一个文件夹,这就是问题所在。你不再需要Python 3中的\uuu init\uuu.py
(发问者可能正在使用,也可能没有使用)。@DavisHerring你的第一个评论是不对的。将包拆分到多个不同的文件夹(或命名空间包)是与导入包不同的概念。不是为了摆脱\uuuu init\uuuuuupy.py
@AliYılmaz Hi Ali,非常感谢!现在终于可以工作了!这很有帮助。导入将依赖于可以以多种方式操作的sys.path
。它还将取决于其他机组安装。如果路径中首先出现一个同名的,它将优先于loocal。@progmatico:推荐\uuuu init\uuuuuuuuu.py
-我自己也广泛使用它。但是在这个问题的上下文中——“为什么这个导入
不起作用?”——根据未知的语言版本,“您需要一个\uuuu init\uuuuuu.py
”这句话可能是真的,也可能不是真的。这是我提出的谨慎的唯一意义。
import sys
sys.path.append("/Users/w/dlp/src/03")
from utils import eval_numerical_gradient