不能导入我的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

我有一个名为"etl_imperva"在etllib/脚本。里面的代码看起来像这样:

#!/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

有更好的方法吗?

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

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

相关内容

最新更新