gpt4 book ai didi

Python 导入 - ModuleNotFoundError : No module named X

转载 作者:行者123 更新时间:2023-12-04 00:23:29 25 4
gpt4 key购买 nike

我可能已经阅读了这里关于进口的所有帖子,但我仍然无法弄清楚进口发生了什么,我花了几个小时试图让一个非常简单的例子工作并且真的把我的头发拉出来了。

我正在使用 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_1进入 module_2这些实际上是包裹吗?我来自java并且发现导入更容易理解,我发现python导入非常困惑......

另外,我怎样才能将我需要的任何内容导入我的测试模块\包\文件夹 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 复杂得多。

最佳答案

首先,不要使用相对导入(使用 . ),因为它会导致 multiple issues .始终写相对于项目根目录的导入。例如,你在 from module_1.foo import Foo 上做得很好.您也应该在 test_all.py 中进行操作和 context.py .此外,使用相对导入后,__init__.py在您的情况下,文件可以留空。
很可能,Python 解释器找不到您的模块,因为 PYTHONPATH环境变量不包含项目的根目录。如果你运行 export PYTHONPATH="YOUR_PROJECT_ROOT_ABSOLUTE_PATH:$PYTHONPATH"在您的脚本之前,它应该按预期运行。为确保始终设置此变量,您可以将导出语句添加到您的 shell 配置文件(例如 .bashrc.bash_profile )。
和作者聊了聊,原来还有第四期。这是一个名字冲突,就像这个 other question 中的一样。 .在他的项目目录中,module_1实际上被称为 foo喜欢它的 child foo.py ,这使解释器感到困惑。

关于Python 导入 - ModuleNotFoundError : No module named X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com