我试图了解python背后的导入机制,但是这段代码给出了错误。
这是我的文件夹结构:
import_test
-calculator
..__init__.py
..operation.py
-lib
..__init__.py
..multiply.py
当我在PyCharm IDE上运行时它正在工作,但是如果我从命令行运行,如
'py operation.py'(for now windows,for the next phase i will try on raspbian RPi)
我正在获取模块未找到错误!在互联网论坛上尝试了许多方法,但仍然没有进展。
multiply.py:
def multiplier(a,b):
return a + b
operation.py:
from lib.multiply import multiplier
print (multiplier(3,4))
lib / init .py:
from .multiply import multiplier
这是我跑步的输出:
File "operation.py", line 1, in <module>
from lib.multiply import multiplier
ModuleNotFoundError: No module named 'lib'
答案 0 :(得分:1)
要转到一个目录,再转到另一个目录,然后再返回,几乎总是需要编辑sys.path
pycharm才能自动为项目执行此操作,而实际上并没有告诉您这样做。
使用您在问题中具有的结构应该起作用:
import_test
-calculator
..__init__.py (EMPTY FILE)
..operation.py
-lib
..__init__.py (EMPTY FILE)
..multiply.py
operation.py:
import os
import sys
# insert the "import_test" directory into the sys.path
sys.path.insert(1, os.path.abspath(".."))
from lib.multiply import multiplier
print (multiplier(3,4))
multiply.py:
def multiplier(a,b):
return a + b
运行operation.py返回:
7
答案 1 :(得分:0)
这是因为当您从计算器目录启动脚本时,python将import_test/calculator
添加到sys.path中,但它对lib一无所知。
您可以按照@tgikal的建议,将父目录添加到sys.path中,但这看起来很丑陋。更好的方法是像这样运行脚本
python -m计算器。操作,您可能需要向import_test目录中添加一个空的__init__.py
文件,具体取决于您的python版本。