【问题标题】:No module named 'base' even though base.py exists即使 base.py 存在,也没有名为“base”的模块
【发布时间】:2020-11-13 05:47:38
【问题描述】:

假设某个目录checkerbot(您可以下载文件)。在我当前的目录中,我有一个名为 checkerbot 的目录,其中包含 4 个文件,即 base.pycheckers.py__init__.pymodel.py

In [1]: import checkerbot.checkers as ck                                        
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-d7411e2bfdb5> in <module>
----> 1 import checkerbot.checkers as ck

~/../main/checkerbot/checkers.py in <module>
----> 1 import base
      2 
      3 class Game:
      4         # Initializes the class.
      5         def __init__(self):

ModuleNotFoundError: No module named 'base'

这个错误告诉我checkerbot 目录中没有base.py,但它是错误的。我该如何解决?供您参考,我使用的是 python 3.7.6。

更新

In [2]: import .base                                                            
  File "<ipython-input-2-e4256d58e84b>", line 1
    import .base
           ^
SyntaxError: invalid syntax

假设我的当前目录是main 并且checkerbotmain/ 中。如果我运行ipython 然后from . import base 然后我得到:

In [1]: from . import base                                                      
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-a8bda1f23f19> in <module>
----> 1 from . import base

ImportError: attempted relative import with no known parent package

另一个错误:

In [5]: from checkerbot import base                                             
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-5-3203dc774184> in <module>
----> 1 from checkerbot import base

~/../main/checkerbot/base.py in <module>
      1 import tensorflow as tf
      2 import numpy as np
----> 3 from model import model
      4 
      5 agent = tf.keras.models.Sequential()

ModuleNotFoundError: No module named 'model'

【问题讨论】:

  • 试试import .base?
  • 需要在python3+中添加.
  • @GreenCloakGuy 我会更新我的问题。

标签: python


【解决方案1】:

使用

from . import base

这将提供checkerbot 包中base 模块的相对导入。

model 模块也有类似的情况:

from .model import model

【讨论】:

  • 看问题
  • 你的尝试没有回答我的问题
  • 我不知道我在哪里搞砸了,但在我的脑海里,都是同一个问题。
  • 它不在 checkerbot/ 中。它在主/。 main/ 包含 checkerbot/。你为什么认为我做了import checkerbot.checkers as ck
  • 你准备修改你的答案吗?
【解决方案2】:

您是否从 checkbot 目录运行脚本?如果从父目录运行脚本,请尝试 from . import basefrom checkerbot import base

目前python可能会在你的父目录中搜索base.py

【讨论】:

    【解决方案3】:

    改用这个

    from . import base
    

    编辑

    考虑以下示例:

    └── foo
        ├── __init__.py
        ├── module_bar.py
        └── module_foo.py
    
    $ cat foo/module_bar.py 
    from . import module_foo
    
    print(module_foo.load())
    
    $ cat foo/module_foo.py 
    def load():
        print("module foo is loaded")
    
    $ python
    Python 3.8.2 (default, May  4 2020, 20:05:11) 
    [GCC 8.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import foo.module_bar
    module foo is loaded
    

    这意味着,无论何时从目录导入模块,目录中的导入都应以 . 开头

    【讨论】:

    • 你可以下载我的模块。试试看。它似乎对我不起作用
    【解决方案4】:

    只写里面包含的文件夹的名字

    例如:

    从 pymouse.base 导入 PyMouseMeta, PyMouseEventMeta

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2019-09-29
      • 2019-11-07
      相关资源
      最近更新 更多