我试图理解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 + boperation.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'发布于 2019-08-02 15:53:43
要进入一个目录,转到另一个目录,然后返回到另一个目录,几乎总是需要编辑sys.path,因为它通常会自动地对项目执行此操作,而不会真正告诉您它是这样做的。
使用您在问题中的结构,这应该是可行的:
import_test
-calculator
..__init__.py (EMPTY FILE)
..operation.py
-lib
..__init__.py (EMPTY FILE)
..multiply.pyoperation.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
发布于 2019-08-03 04:09:30
这是因为当您从计算器目录启动脚本时,python将其import_test/calculator添加到sys.path中,但是它对lib一无所知。
您可以遵循@tgikal建议并将父目录添加到sys.path中,但它看起来像一个丑陋的黑客。处理此问题的更好方法是像这样运行脚本
python -m calculator.operation,您可能需要向import_test目录中添加一个空的__init__.py文件,这取决于您的python版本。
发布于 2022-03-03 10:44:45
在我的例子中,我从另一个项目复制了一些代码,在代码顶部的导入中,用户构建了模块,但是我没有将这个用户构建模块复制到我的新项目中。我在原始项目中找到了这个需要的lib模块文件夹,并复制了它以摆脱消息。
https://stackoverflow.com/questions/57328142
复制相似问题