使用包的Python项目中的ModuleNotFoundError

时间:2019-04-30 15:35:49

标签: python package importerror

我有一个Python项目(python 3.6),它的包结构非常简单。我的目标是拥有一个包含模块的软件包,这些模块可在其他软件包中重复使用。结构如下:

    my_project                   
    ├── /docs           
    ├── /src
    │   ├── __init__.py                
    │   ├── /common
    │   |    |── __init__.py      
    │   |    |── common_module.py
    │   ├── /packageA
    │   |    |── __init__.py      
    │   |    |── modA.py

问题在于,当我在modA.py内执行以下操作时:

    from src.common import common_module as cm

我收到以下错误:ModuleNotFoundError: No module named src.common

到目前为止我尝试过的是

  • 确保我具有https://docs.python.org/3/tutorial/modules.html中正确的软件包结构
  • export PYTHONPATH=<path_to_project>/src所使用的虚拟环境中扩展PYTHONPATH
  • 也将__init__.py放在/my_project
  • 阅读有关StackOverflow的其他问题,但没有一个提供解决方案。他们中的一些人使用sys.path进行了骇人听闻的工作,据说即使可行,这也不是一个好的解决方案。

这些都不起作用,我已经在这个问题上苦苦挣扎了一段时间,因此任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

为了使此导入正常进行,PYTHONPATH必须为.../my_project,而不是.../my_project/src

答案 1 :(得分:1)

是的,您应该将__init__.py放在project中,
然后export PYTHONPATH = <LOCAL_PATH_TO_...>/project