Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件导入模块不起作用_Python - Fatal编程技术网

Python 从文件导入模块不起作用

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

我正在运行一个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")
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