Pycharm无法从父文件夹名称导入模块

时间:2020-04-18 19:33:02

标签: python pycharm

我通过以下方式定义了项目:

project/
  __init__.py
  dog.py
  cat.py

在我的dog.py中,我打电话:

import project.cat

这给了我这个错误:

ModuleNotFoundError: No module named 'project'

但是,我已经将PYTHONPATH设置为项目目录的父目录,如果我在Pycharm外部(例如,在命令行上)运行dog.py,那么它将毫无例外地很好地工作。

现在,即使我将项目文件夹添加为Source Root,Pycharm仍将导入语句标记为错误(红色),并且也不允许我在Pycharm中为dog.py程序运行它。这真令人困惑。有人可以帮忙吗?

* PS:我不想在dog.py中使用相对的导入,例如“ from .cat import *”,因为我有if name == main 语句在dog.py中,该python不允许我在dog.py中运行相对导入。

===============

添加更多信息:

我注意到是否在项目下创建了src文件夹以使结构类似:

project/
  __init__.py
  src/
    __init__.py
    dog.py
    cat.py

然后我可以在dog.py中称呼它

import src.cat

但是这样,我仍然很麻烦,因为当我在Pycharm中运行程序时,我必须使用这种方式:

import src.cat

当我在ipython Notebook中运行程序时,我必须像这样导入:

import project.src.cat

这使我不得不在不同地方运行时不断切换代码。

====================

如果我只是在dog.py中这样做

import cat

它将在Pycharm中运行。但是当我在命令行中调用时,现在那里出错了:

In [10]: import project.dog                                                 
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-10-be5ebc05b4b0> in <module>
----> 1 import project.dog  

~/PycharmProjects/project/dog.py in <module>
      2 import pandas as pd
      3 import numpy as np
----> 4 import cat
      5 from datetime import datetime
      6 

ModuleNotFoundError: No module named 'cat'

1 个答案:

答案 0 :(得分:0)

通过将项目的父文件夹设置为根文件夹并以root设置为Source Root来解决此问题。

parent-folder\
  project\
    __init__.py
    dog.py
    cat.py

现在,只需在.bashrc中添加一行,它就可以在命令行和Pycharm上很好地工作:

export PYTHONPATH=$PYTHONPATH:~/project