python - 尽管在层次结构中处于同一级别,但无法导入我的 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
有一个更好的方法吗?
解决方案
实际上,它不在层次结构中的同一级别。
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
推荐阅读
- javascript - 如何在 n:m 关联中进行单向限制?
- matlab - 如何使用批处理文件打开已打开的 MATLAB 文件?
- ubuntu - 在 Ubuntu 上,如何将 ~/.dotnet/tools 添加到 PATH 变量中?它不在 /etc/environment 或 ~/.bashrc 中,但它仍然在我的 PATH 中
- raku - 哈希中的接受与智能匹配:有什么区别?
- r - knitr opts_knit$set(root.dir = "../") 当 chunk_output_type: 控制台被忽略
- .net - System.Speech.Synthesis 的事件信息中的流编号在哪里?
- java - 如何在 API 28 中设置 android 日期和时间选择器的样式
- jboss - 使用不同于 UPN 或 samAccountName 的用户名进行身份验证
- azure - CLI 是否针对吞吐量进行了优化?
- tensorflow - tensorflow.python.framework.errors_impl.ResourceExhaustedError