Python 在main.py中使用但在项目外部工作时导入模块引发错误

Python 在main.py中使用但在项目外部工作时导入模块引发错误,python,import,Python,Import,我有以下项目结构 project ├───common │ ├───__init__.py │ └───Logger.py ├───config │ └───configurations.xml ├───main.py ├───tests │ └───input_file.xml └───tools ├───RWOReaderDataSeries │ └───... ├───RWOReaderMap │ └───... ├───Si

我有以下项目结构

project
├───common
│   ├───__init__.py
│   └───Logger.py
├───config
│   └───configurations.xml
├───main.py
├───tests
│   └───input_file.xml
└───tools
    ├───RWOReaderDataSeries
    │   └───...
    ├───RWOReaderMap
    │   └───...
    ├───SimulatorRunner
        ├───__init__.py
        ├───main.py
        ├───Runner.py
        └───ConfigurationFile.py
我试图在project\main.py中使用Runner.py,但总是会出现错误消息

project\SimulatorRunner\Runner.py导入:

import os
from ConfigurationFile import ConfigurationFile
import logging
import datetime
import tools.RWDWriterDataSeries.InputData as RWDWDSID
import tools.RWDWriterDataSeries.RWDWriter as RWDWDSW
import tools.SimulatorRunner.Runner as SimRunner
和project\main.py导入:

import os
from ConfigurationFile import ConfigurationFile
import logging
import datetime
import tools.RWDWriterDataSeries.InputData as RWDWDSID
import tools.RWDWriterDataSeries.RWDWriter as RWDWDSW
import tools.SimulatorRunner.Runner as SimRunner
当我执行“project\SimulatorRunner\main.py”时,它会工作

但是当我执行“project\main.py”时,我得到了一个错误:

Traceback (most recent call last):
  File "C:\Users\Fernanda\Documents\Solpe\Shift\main.py", line 8, in <module>
    import tools.SimulatorRunner.Runner as SimRunner
  File "C:\Users\Fernanda\Documents\Solpe\Shift\tools\SimulatorRunner\Runner.py", line 9, in <module>
    from ConfigurationFile import ConfigurationFile
ModuleNotFoundError: No module named 'ConfigurationFile'
回溯(最近一次呼叫最后一次):
文件“C:\Users\Fernanda\Documents\Solpe\Shift\main.py”,第8行,在
将tools.SimulatorRunner.Runner作为SimRunner导入
文件“C:\Users\Fernanda\Documents\Solpe\Shift\tools\SimulatorRunner\Runner.py”,第9行,在
从配置文件导入配置文件
ModuleNotFoundError:没有名为“ConfigurationFile”的模块

这是唯一不起作用的导入。

它在
~/project/main.py
中不起作用,因为没有
~/project/ConfigurationFile
模块。它确实在
~/project/tools/SimulatorRunner/main.py
中工作,因为有一个
~/project/tools/SimulatorRunner/ConfigurationFile
模块

这是因为Python使用了一个非常复杂的系统来推断与执行脚本相关的模块应该从何处加载(有关更多详细信息,请参阅)

要查看
sys.path
,在脚本开始时,可以使用:

import sys
from pprint import pprint as p
p(sys.path)
我怀疑
project/main.py
project/tools/SimulationRunner/main.py
的结果不同


解决这个问题的一种方法是将
~/project
添加到PYTHONPATH中(这样PYTHONPATH就不会猜了),并像这样引用
ConfigurationFile
来自tools.SimulationRunner.ConfigurationFile import ConfigurationFile

你的
PYTHONPATH
是什么?