无法从pycharm中的源目录导入模块

时间:2019-05-22 09:44:07

标签: import module pycharm python-3.6

这个问题曾经被问过-但是我无法用任何答案解决它。我在pycharm中选择了一个项目文件夹(注意,该项目文件夹不在../PycharmProject/...目录中。

我的结构非常基础:

project_title (folder)
             |--src (folder)
                  |-- app.py  
                  |-- pipeline_tools (folder)
                     |-- helpers.py
                     |-- other modules

我尝试了所有可能的解决方案和组合,但是在app.py中尝试从tools的任何一个模块导入函数时,都会出错。

此外,Pycharm用红色强调以下语句:

1)from pipeline_tools.helpers import a_certain_function(带红色下划线的“未解析参考”)

但是以下内容没有给我带来红色:

2)from .pipeline_tools.helpers import a_certain_function(红色下划线,请注意相对含义)

我在模块中是否有__init__.py的事实并没有改变-我仍然遇到以下两个错误:

为1)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/gabriele/pycharm-2019.1.1/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'pipeline_tools'

为2)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/gabriele/pycharm-2019.1.1/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named '__main__.pipeline_tools'; '__main__' is not a package

我确定自己尝试过:

1)转到settings > Project Structure,检查content root是否为.../project_title并将其标记为“源”-它是蓝色。

2)在__init__.py文件夹和pipeline_tools文件夹中添加/src,尝试所有可能的组合。

3)使用下面的代码检查项目文件夹的路径是否是路径字符串的一部分-它位于结尾

import sys
print(sys.path)

4)使用下面的代码将项目路径移动到sys.path的开头: sys.path.insert(0,'path/to/project_title')

5)刚刚尝试像这样打印PYTHONPATH

os.environ['PYTHONPATH'].split(os.pathsep)

并且项目的目录不在其中

我现在有点茫然。不知道发生了什么。

1 个答案:

答案 0 :(得分:0)

出于某种限制,我不理解将src目录设置为源sources root而不是project_title目录(无论如何都包含它...但是我知道什么) )的工作。

所以解决方案是:

->设置   ->项目结构                       ->删除先前的内容根路径,并将内容源设置为src目录

这样导入:

from pipeline_tools.helpers import func_1, func_2

注意:我没有在我的文件夹中有一个__init__.py文件,因为我认为我已经不再需要它们了。

  

在Python 3.3之前,文件系统目录和zipfile中的目录必须包含 init .py才能被识别为Python软件包目录。即使导入软件包时没有初始化代码,解释器仍需要一个空的 init .py文件来在该目录中查找任何模块或子软件包。

     

这在Python 3.3中已更改:现在sys.path上任何名称与要查找的软件包名称匹配的目录都将被识别为该软件包的贡献模块和子软件包。

来自Nick Coghlan’s Python Notes