我正在编写一个内部使用的库,名为"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