![](/img/trans.png)
[英]`pickle`: yet another `ImportError: No module named my_module`
[英](Yet Another) 'ImportError: No module named my_module'
好的,我将代码剥离到极小,以说明问题并使其可重现
语境 :
谈话很便宜。 给你看代码:
代码结构:
$ tree pymod/
pymod/
├── modone
│ ├── __init__.py
│ └── one.py
└── modtwo
├── __init__.py
└── two.py
init.py无处不在,显然
一个.py:
from modtwo import two
class One():
@staticmethod
def print_one():
print("this is one")
two.print_two()
if __name__ == "__main__":
One().print_one()
二.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
到目前为止我尝试过的:
回答后编辑:
到目前为止我学到了什么:
模块和脚本是两个不同的概念。 它们就像光波/粒子二元性
因此,它们应该被这样调用/处理(作为模块或脚本)
模块可以作为脚本运行,但它不会知道它周围的目录结构
一旦你有一个类似包的目录结构,运行带有-m
选项的 python 以将模块作为脚本运行:
python -m modone.one
您的 one.py 中也有一个错误。 您在导入的模块上调用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.