首页 > 解决方案 > 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到导入中并且测试通过了。

我究竟做错了什么?从理论上讲,我应该能够以一种我可以执行已安装的包并在我的代码上运行它以进行测试的方式导入所有内容,而无需更改任何内容。

有什么提示吗?

标签: pythonpython-importdocopt

解决方案


推荐阅读