Python导入-ModuleNotFoundError:没有名为X的模块

有一个符号

我可能已经阅读了有关进口的所有文章,但仍然无法弄清楚进口的情况,我花了数小时试图找到一个非常简单的示例,并从字面上拉了我的头发。

我正在使用python 3.7和pycharm,但是我正在从命令行运行代码,对于使用pytest的单元测试。

我的项目结构是:

my_message_validator/
    __init__.py

    module_1/
        __init.py__
        foo.py

    module_2/
        __init.py__
        bar.py
        baz.py

    module_3
        context.py
        test_all.py

模块_1。初始化.py

from module_1 import foo

模块_2。初始化.py

# For some reason pycharm doesnt complain when I use '.' but if I use module_2 it does
from . import bar, baz

如果我尝试从命令行运行我的代码或测试,无论我如何移动,似乎都可以得到ModuleNotFoundError: No module named,当我设法使测试工作时,我仍然无法从命令行单独运行我的代码。

如何导入module_1module_2并且这些居然包?我来自Java,发现导入更容易理解,我发现python导入非常令人困惑...

另外,我怎样才能将所需的任何内容导入到我的测试模块\ package \ folders中context.py

当前的测试上下文如下所示:

import os
import sys

# Is this needed as it doesnt seem to do anything?
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from module_1.foo import Foo

from module_2 import bar, baz

test_all.py我试图像这样从上下文文件导入:

from .context import bar,baz
from .context import Foo

# Calling in test like
Foo.load_file(file)

bar.method_one()
baz.method_two()

我是否需要所有__init.py__文件,并且应该将它们放入什么中以使我的方法和类公开/公开?我希望整个程序包都可重用,因此希望能够像对待Java中的jar文件一样对待它。

任何帮助将不胜感激,因为每当我在其他地方更改错误时,python似乎比Java复杂得多。

皮埃尔

首先,不要使用相对导入(和.),因为这会引起多个问题始终相对于项目根目录编写导入文件。例如,您在方面做得很好from module_1.foo import Foo您还应该在test_all.py和中执行此操作context.py

其次,您正在使用Python 3.7。因为Python 3.3, __init__.py文件,不使用任何更多您可以删除所有这些。

Python解释器很可能找不到您的模块,因为PYTHONPATH环境变量不包含项目的根。如果export PYTHONPATH="YOUR_PROJECT_ROOT_ABSOLUTE_PATH:$PYTHONPATH"在脚本之前运行,则脚本应按预期运行。为了确保始终设置此变量,您可以将export语句添加到您的shell配置文件中(例如.bashrc.bash_profile)。

与作者聊天后,事实证明是第四期。就像在另一个问题中一样,这是一个名字冲突在他的项目目录中,module_1实际上foo就像它的child一样被调用foo.py,这混淆了解释器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ModuleNotFoundError:导入模块时没有名为“ x”的模块

相对导入-ModuleNotFoundError:没有名为x的模块

ModuleNotFoundError:没有名为“python”的模块

Python导入ModuleNotFoundError:没有名为'model'的模块

Python没有名为X的模块-绝对导入

传递导入错误:ModuleNotFoundError:没有名为“ ...”的模块

无法导入ebooklib:ModuleNotFoundError:没有名为“ ebooklib”的模块

从模型导入事件ModuleNotFoundError:没有名为“模型”的模块

导入pyHook。ModuleNotFoundError: 没有名为“pyHook”的模块

ModuleNotFoundError:导入mysql时没有名为“_version”的模块

Python:没有名为“ X”的模块

MacOS,Python:ModuleNotFoundError:没有名为“ kiwisolver”的模块

ModuleNotFoundError:Python中没有名为“ sksurv”的模块

Anaconda Python:ModuleNotFoundError:没有名为“ matlab”的模块

ModuleNotFoundError:没有名为“sklearn”的模块python

ModuleNotFoundError:没有名为“ gi”的模块-Python-OsX

ModuleNotFoundError:没有名为错误python 3.8.2的模块

ModuleNotFoundError:Python 中没有名为“plyer”的模块

ModuleNotFoundError:在python 3.9中没有名为“ scipy”的模块

Python:ModuleNotFoundError:没有名为“ stats”的模块

Python ModuleNotFoundError:没有名为“ azure.cognitiveservices”的模块

Python:ModuleNotFoundError:没有名为“客户端”的模块

Python 3 ModuleNotFoundError:没有名为“numpy”的模块

ModuleNotFoundError:没有名为“tensorflow.python”的模块Anaconda

ModuleNotFoundError:python中没有名为“src”的模块

ModuleNotFoundError:在Python IDE中没有名为“ seaborn”的模块

ModuleNotFoundError:在Python 3.6.7上没有名为“ google”的模块

Python ModuleNotFoundError:没有名为“socceraction.classification”的模块

Python ModuleNotFoundError:没有名为“ returndata”的模块