首页 > 解决方案 > 尽管在层次结构中处于同一级别,但无法导入我的 python 模块

问题描述

我正在编写一个供内部使用的库,它称为“etllib”,我具有以下结构:

etl-lib
├── README.md
├── etllib
│   ├── __init__.py
│   ├── client
│   │   ├── __init__.py
│   │   ├── elastic.py
│   │   └── qradar.py
│   ├── etl
│   │   ├── __init__.py
│   │   └── etl_imperva.py
│   └── util
│       ├── __init__.py
│       ├── config.py
│       ├── daemon.py
│       ├── elastic
│       │   ├── __init__.py
│       │   └── impeva_index_config.py
│       └── imperva
│           ├── __init__.py
│           ├── kpe_config.py
│           └── query_config.py
├── scripts
│   └── etl_imperva
└── setup.py

我在 etllib/scripts 中有一个名为“etl_imperva”的脚本。里面的代码是这样的:

#!/usr/bin/python3
import sys
from etllib.etl.etl_imperva import ETL


# Run with python3 imperva_run.py start|run|stop|restart
ETL.startup(sys.argv)

如果我安装这个包(etllib)并调用这个脚本,它工作得很好。但是当我需要测试东西时,如何告诉 python 使用我工作目录中的模块而不是安装那些模块?因为每次我对模块进行更改时,我都需要重新安装软件包,这有点耗时。

我也尝试卸载包进行测试,但是当我运行这个脚本时,我收到以下错误:

Exception has occurred: ModuleNotFoundError
No module named 'etllib'
  File "/home/jleonse/etl-lib/scripts/run_imperva", line 3, in <module>
    from etllib.etl.etl_imperva import ETL

有一个更好的方法吗?

标签: pythonmodulepackage

解决方案


实际上,它不在层次结构中的同一级别。

from etllib.etl.etl_imperva import ETL 仅当etllib位于同一目录或系统 PATH 中的目录中时才有效,但 etllib 位于父目录中,因此无法找到它。

因此,如果您将项目结构更改为:

etl-lib
├── README.md
├── etllib
│   ├── __init__.py
│   ├── client
│   │   ├── __init__.py
│   │   ├── elastic.py
│   │   └── qradar.py
│   ├── etl
│   │   ├── __init__.py
│   │   └── etl_imperva.py
│   └── util
│       ├── __init__.py
│       ├── config.py
│       ├── daemon.py
│       ├── elastic
│       │   ├── __init__.py
│       │   └── impeva_index_config.py
│       └── imperva
│           ├── __init__.py
│           ├── kpe_config.py
│           └── query_config.py
├── etl_imperva
│
└── setup.py

推荐阅读