我正在写一个内部使用的库,它叫做"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有没有更好的方法来做这件事?
发布于 2021-01-22 04:06:39
实际上,它在层次结构中不在同一级别上。
只有当etllib在同一目录中,或者在系统路径中的某个目录中,但etllib在父目录中,因此它找不到它时,from etllib.etl.etl_imperva import ETL才会起作用。
因此,如果您将项目结构更改为:
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.pyhttps://stackoverflow.com/questions/65834811
复制相似问题