繁体   English   中英

Package 和 python 中的模块导入

[英]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上移一个文件夹到 sound
  • 尝试import module2
  • sound_1 = module2.Module2()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM