首页 > 解决方案 > Python 帮助处理包和模块

问题描述

我需要一些帮助来处理 python 中的文件夹结构。我得到了这样的结构:

/main-folder
    /assets
        somefiles.txt
    /integrations
        /module-folder
            __init__.py
            ingestion.py
        __init__.py
    models.py

ingestion.py里面我有:

import os    
from models import MyModel

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

some_function()
    some_processing()

if __name__ == "__main__":
    some_function()

上面提到的都是__init__.py空的。

所以我需要处理一些信息并使用models模块来存储它们。当试图intestion.py直接从其目录执行时,它说:No module named 'models'. 所以我猜我必须将整个事情作为一个包来执行。我不知道应该如何导入位于包上方的模块并且不能触及结构。

任何帮助将不胜感激。

标签: pythonpackagepython-modulepython-packaging

解决方案


您要做的就是将模块的目录添加到 PYTHONPATH 环境变量中。但是,如果您不想这样做,您可以修改程序中的 sys.path 列表,Python 解释器在其中搜索要导入的模块,python 文档

当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它会在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。sys.path 从这些位置初始化:

  • 包含输入脚本的目录(或当前目录)。
  • PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。

  • 安装相关的默认值。

初始化后,Python 程序可以修改 sys.path。包含正在运行的脚本的目录位于搜索路径的开头,位于标准库路径之前。这意味着将加载该目录中的脚本,而不是库目录中的同名模块。除非打算更换,否则这是一个错误。

知道了这一点,您可以在程序中执行以下操作:

import sys
# Add the main-folder folder path to the sys.path list
sys.path.append('/path/to/main-folder/')

# Now you can import your module
from main-folder import models
# Or just
import main-folder

推荐阅读