我试图了解 python 背后的导入机制,但这段代码给出了错误。
这是我的文件夹结构:
import_test
-calculator
..__init__.py
..operation.py
-lib
..__init__.py
..multiply.py
Run Code Online (Sandbox Code Playgroud)
当我在 PyCharm IDE 上运行时它可以工作,但是如果我从命令行运行
'py operation.py'(for now windows,for the next phase i will try on raspbian RPi)
Run Code Online (Sandbox Code Playgroud)
我收到模块未找到错误!从网上论坛尝试了很多方法,但仍然没有进展。
乘法.py:
def multiplier(a,b):
return a + b
Run Code Online (Sandbox Code Playgroud)
操作.py:
from lib.multiply import multiplier
print (multiplier(3,4))
Run Code Online (Sandbox Code Playgroud)
库/初始化.py:
from .multiply import multiplier
Run Code Online (Sandbox Code Playgroud)
这是我运行的输出:
File "operation.py", line 1, in <module>
from lib.multiply import multiplier
ModuleNotFoundError: No module named 'lib'
Run Code Online (Sandbox Code Playgroud)
要进入一个目录、进入另一个目录,然后返回,几乎总是需要编辑,pycharmsys.path往往会自动为项目执行此操作,而不会真正告诉您它是这样做的。
使用问题中的结构,这应该有效:
import_test
-calculator
..__init__.py (EMPTY FILE)
..operation.py
-lib
..__init__.py (EMPTY FILE)
..multiply.py
Run Code Online (Sandbox Code Playgroud)
操作.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))
Run Code Online (Sandbox Code Playgroud)
乘法.py:
def multiplier(a,b):
return a + b
Run Code Online (Sandbox Code Playgroud)
运行操作.py 返回:
7