无法导入模块:在工作文件中找不到模块,但在另一个文件中工作正常

Posted

技术标签:

【中文标题】无法导入模块:在工作文件中找不到模块,但在另一个文件中工作正常【英文标题】:Can't import module: module can't be found in working file but works fine in another file 【发布时间】:2021-07-09 23:12:07 【问题描述】:

我有以下文件结构

Working Directory
  |
  |-- Package
  |     |-- __init__.py
  |     |-- FirstModule.py
  |     |-- SecondModule.py
  |     |-- TestingFile.ipynb
  |
  |-- WorkingFile.ipynb

FirstModule.py

def func(n):
    return n+1

SecondModule.py

import FirstModule

def func2(n):
    value = FirstModule.func(n)
    return (n, value)

当我将任一模块导入TestFile.ipynb 时,它们都可以正常工作,如下所示:

TestingFile.ipnyb

import FirstModule   # Works Fine
import SecondModule  # Works Fine

但是,如果我在 WorkingFile.ipynb 并尝试导入 SecondModule,我会收到 ModuleNotFoundError。更具体地说:

WorkingFile.ipynb

from Package import SecondModule as sm
from Package import FirstModule as fm
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-14-8a837a311e6c> in <module>
      2 import numpy as np
      3 
----> 4 from Package import SecondModule as sm
      5 from Package import FirstModule as fm

~\Documents\Jupyter Notebooks\Working Directory\Package\SecondModule.py in <module>
     26 from datetime import datetime
     27 
---> 28 import FirstModule as fm
     29 
     30 # Constants

ModuleNotFoundError: No module named 'FirstModule'

我是否忘记了模块在包含它们的包之外协同工作所需的东西?

【问题讨论】:

第一次导入时不要使用.py 第二次您必须从工作目录开始,例如from package.firstmodule import what_you_needimport package.firstmodule @Matiiss 抱歉,您的第一个问题是问题中的拼写错误。在我的实际代码中它没有 .py 我已经纠正了我的问题中的错字。 【参考方案1】:

问题在于SecondModule.py 中的导入语句。

我能够使用您的示例以及当我更改导入语句时重现错误

import FirstModule.py

from Package import FirstModule

一切正常。您不应使用文件名,即从导入语句中删除 .py

您应该在导入模块时明确使用包名,或者使用相对导入,即

from . import FirstModule

或者如果您只想要特定的对象/功能

from .FirstModule import some_function

【讨论】:

谢谢! .py 实际上只是我的问题中的一个错字;但是将SecondModule.py 中的import FirstModule 更改为from . import FirstModule 解决了我的问题。

以上是关于无法导入模块:在工作文件中找不到模块,但在另一个文件中工作正常的主要内容,如果未能解决你的问题,请参考以下文章

OSError: [WinError 126] 在 Python 中找不到指定的模块

为啥 Aptana 3 (OS X) 在导入的项目中找不到 django 设置模块?

开玩笑测试:在打字稿组件导入中找不到模块

TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块

在 TypeScript 中找不到模块的声明文件

在 Electron + React + Webpack 设置中找不到模块“电子”