[英]Package and module import in python
这是我的文件夹结构:
|sound
|-__init__.py
|-model
|-__init__.py
|-module1.py
|-module2.py
|-simulation
|-sim.py
文件 module1.py 包含以下代码:
class Module1:
def __init__(self,mod):
self.mod = mod
文件 module2.py 包含以下代码:
class Module2:
def __init__(self,mods=None):
if mods is None:
mods = []
self.mods = mods
def append(self.mod):
mods.append(mod)
最后文件 sim.py 包含代码:
import sound
sound_1 = sound.module2.Module2()
当我执行 sim.py 时,我得到一个ModuleNotFoundError: No module named 'sound'
我已经尝试了很多东西,例如from sound.model import module2
等,但我相信问题来自 python 没有找到sound
package。
我已经阅读了几个教程、文档和线程,但我不明白我做错了什么。
那是因为 python 正在模拟文件夹中寻找模块声音。 当您尝试以这种方式执行 python 文件时:
python sim.py
您应该改为在与声音相同的文件夹中创建 run.py
sound/
model/
...
simulation/
run.py
内容如下:
from sound.simulator import sim
并使用python run.py
运行它,这样 python 将 workdir 设置为包含sound
的文件夹
同样在 sim.py 中,您应该按如下方式导入模块:
import sound.model.module1
sound.model.module1.Module1()
或者像这样:
from sound.model import module1
module1.Module1()
导入模块时的说明,python 在sys.path
列出的目录中查找文件夹 sound 或文件 sound.py ,第一个是''
(当前工作目录)。
运行 python 文件时,由于某种原因 python 将当前工作目录设置为包含该文件的文件夹,即使它像python sound/simulation/sim.py
一样运行
为了防止这种行为,我们必须在我们想要成为 workdir 的目录(即包含声音的目录)中创建 run.py,所以当 python 看到import sound
时,它会搜索正确的目录
sim.py
上移一个文件夹到 soundimport module2
sound_1 = module2.Module2()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.