(还有一个)“ImportError:没有名为my_module的模块”

2024-10-16 20:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我将代码剥离到了极致,以说明问题并使其可复制

背景:

  • Python 3.7
  • 没有文具或有趣的东西

谈话是廉价的。向您显示代码:

代码结构:

$ tree pymod/
pymod/
├── modone
│   ├── __init__.py
│   └── one.py
└── modtwo
    ├── __init__.py
    └── two.py

init.py显然无处不在

1.py:

from modtwo import two
class One():
    @staticmethod
    def print_one():
        print("this is one")
        two.print_two()

if __name__ == "__main__":
    One().print_one()

2.py:

class Two():
    @staticmethod
    def print_two():
        print("this is from two")

抛出错误

$ python modone/one.py

Traceback (most recent call last):
  File "modone/one.py", line 1, in <module>
    from modtwo import two
  ImportError: No module named modtwo

到目前为止,我尝试的是:

  • 将每个可能的目录追加到PYTHONPATH
  • 从项目根目录和相对路径运行命令
  • 强迫性地搔我的头

回答后编辑:

到目前为止,我学到的是:

  • 模块和脚本是两个不同的概念。 它们就像光波/粒子二象性
    因此,它们应该被这样调用/处理(作为模块或脚本)

  • 一个模块可以作为脚本运行,但它不会知道它周围的目录结构


Tags: 模块代码frompyimport脚本init结构
2条回答

一旦有了类似于包的目录结构,请使用-m选项运行python,以脚本的形式运行模块:

python -m modone.one

你的one.py中也有一个bug。在导入的模块上调用print_two,而不是在模块内部的类上调用

问题在于如何调用print_two方法。 您调用了两个,这是一个模块,这就是为什么您得到“模块不可调用”

from modtwo import two
class One():
    @staticmethod
    def print_one():
        print("this is one")
        two().print_two()

你应该先访问这个类

from modtwo import two
class One():
    @staticmethod
    def print_one():
        print("this is one")
        two.Two.print_two()

然后像这样运行脚本

python -m modone.one

结果是:

this is one
this is from two

相关问题 更多 >