Python - 找不到模块

use*_*206 32 python module

我是Python的初学者.在开始之前,这是我的Python文件夹结构

-project
----src
------model
--------order.py
------hello-world.py
Run Code Online (Sandbox Code Playgroud)

src我有一个名为的文件夹model,其中有一个Python文件order.py,其内容如下:

class SellOrder(object):
    def __init__(self,genericName,brandName):
        self.genericName = genericName
        self.brandName = brandName
Run Code Online (Sandbox Code Playgroud)

接下来我hello-world.pysrc文件夹内,上面一层order.py:

import model.order.SellOrder

order = SellOrder("Test","Test")

print order.brandName
Run Code Online (Sandbox Code Playgroud)

每当我运行python hello-world.py它都会导致错误

Traceback (most recent call last):
  File "hello-world.py", line 1, in <module>
    import model.order.SellOrder
ImportError: No module named model.order.SellOrder
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Raf*_*azZ 30

Python中的所有模块都必须具有特定的目录结构.你可以在这里找到细节.

创建一个__init__.pymodel目录下调用的空文件,这样您的目录结构将类似于:

.
??? project
    ??? src
        ??? hello-world.py
        ??? model
            ??? __init__.py
            ??? order.py
Run Code Online (Sandbox Code Playgroud)

同样在您的hello-world.py文件中,将import语句更改为以下内容:

from model.order import SellOrder
Run Code Online (Sandbox Code Playgroud)

那应该修好:)

PS:如果要将model目录放在其他位置(不在同一目录分支中),则必须使用修改python路径sys.path.

  • 也没有一个`src`目录被认为是好习惯.这也是有道理的,因为如果你在其他地方导入你的代码,你应该能够`import project.model`而不是`project.src.model`. (7认同)
  • @miraculixx绝对! (2认同)
  • 这似乎不起作用。我的每个文件夹中都有 `__init__.py` 但它仍然无法导入。Pycharm 没有显示任何错误,但终端一直显示错误。 (2认同)

Cri*_*fón 7

您需要__init__.py在层次结构中的每个文件夹中都有一个名为(每边两个下划线)的文件,因此src/一个在model/. 这是 python 寻找知道它应该访问特定文件夹的内容。这些文件旨在包含初始化说明,但即使您将它们创建为空,这也能解决问题。


Ser*_*hko 6

如果它是您的根模块,只需将其添加到PYTHONPATH(PyCharm 通常会这样做)

export PYTHONPATH=$PYTHONPATH:<root module path>
Run Code Online (Sandbox Code Playgroud)

对于 Docker:

ENV PYTHONPATH="${PYTHONPATH}:<root module path in container>"
Run Code Online (Sandbox Code Playgroud)

  • 如果您要从根模块运行此代码,则在 PYTHONPATH 中包含当前目录“.”(如果尚不存在)会非常方便。Linux:`导出 PYTHONPATH=$PYTHONPATH:.`。Windows:`设置 PYTHONPATH=%PYTHONPATH%;。` (2认同)