python - python包中导入的奇怪问题
问题描述
我正在构建一个可安装的 python 包,它基本上是一个基于docopt
和其他草药的 CLI。
整体结构如下:
README.md
MANIFEST.in
setup.py
grok/
__init__.py
module.py
other_module.py
main.py
在我的main.py
我有如下导入的其他模块:
主文件
# Imagine the docopt USAGE string here
from .module import something
from .other_module import other_something
# the rest of the logic comes here
主要问题是,我可以安装包并使用它,但是,当我更改代码时,可能会添加功能或修复错误,如果我尝试像这样运行它:
python main.py -h
它给了我以下错误:
ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package
我用谷歌搜索了一下,发现由于dot
我的导入实际上是在引用__main__
,所以,我应该删除 ,dots
然后我应该能够按照我想要的方式对其进行测试。
我这样做了,它奏效了,我测试了我所有的东西,然后运行了测试套件,作为测试套件的一部分,它测试安装包并运行它-h
作为烟雾测试它的一种方式,它失败了以下错误:
ModuleNotFoundError: No module named 'module'
然后我将其重新添加dots
到导入中并且测试通过了。
我究竟做错了什么?从理论上讲,我应该能够以一种我可以执行已安装的包并在我的代码上运行它以进行测试的方式导入所有内容,而无需更改任何内容。
有什么提示吗?
解决方案
推荐阅读
- elasticsearch - 启用 elasticsearch 安全功能后 Elasticsearch.service 失败
- python-2.7 - 是否可以通过在 Tkinter 中读取保存的文件来创建按钮
- javascript - 如何使用 Krpano 中 db/json 源中的 lat、long 值动态添加热点
- ios - Nativescript 应用程序在 iOS 14 上是否存在问题?
- javascript - npm "这个版本的 'buffer' 已经过时了。" 您必须更新到 v4.9.2 或更高版本
- python - 在模拟配置时使用 python 单元测试中的固定输入端到端测试 Airflow DAG
- jdbc - Kafka 连接器:如何使用 OR 运算符和递增列执行查询?
- javascript - 在基本 catch 块中处理 promise 拒绝
- php - PHP用负开始值计算时间
- php - 为 PHP 安装 gRPC 失败