ImportError and ModuleNotFoundError: how to get a script running from the command line?

ImportError and ModuleNotFoundError: how to get a script running from the command line?

我有一个结构如下的项目:

HorticulturalSalesPrediction/
    Docker
    HorticulturalSalesPrediction_API/
        optimization/
            __init__.py
            optuna_optim.py
        preprocess/
            __init__.py
            base_dataset.py
        utils/
            __init__.py
            FeatureAdder.py
            helper_functions.py
    __init__.py
    optim_pipeline.py
    run.py

在脚本中 run.py 我导入这样的东西:

import optim_pipeline
from utils import helper_functions

在脚本中 optim_pipeline.py 我导入这样的东西:

from utils import helper_functions
from preprocess import base_dataset
from optimization import optuna_optim  

我用 IDE PyCharm 开发了这个框架,当我用 'Run'-Button 运行 时,框架工作正常。但是当我想 运行 通过带有 python3 run.pypython3 -m run.py 的终端时,我收到以下错误:

Traceback (most recent call last):
  File "run.py", line 3, in <module>
    import optim_pipeline
  File "/home/josef/Schreibtisch/HorticulturalSalesPrediction/HorticulturalSalesPrediction/HorticulturalSalesPrediction_API/optim_pipeline.py", line 4, in <module>
    from preprocess import base_dataset
  File "/home/josef/Schreibtisch/HorticulturalSalesPrediction/HorticulturalSalesPrediction/HorticulturalSalesPrediction_API/preprocess/base_dataset.py", line 8, in <module>
    from HorticulturalSalesPrediction_API.utils import FeatureAdder
ModuleNotFoundError: No module named 'HorticulturalSalesPrediction_API'

我知道整个 python 导入主题(, Call a function from another file?, Relative imports for the billionth time,...)已经有大量问题和解决方案,但其中 none 对我有用。

当我打印 sys.path 时,我和其他人一起收到 '/home/josef/Schreibtisch/HorticulturalSalesPrediction/HorticulturalSalesPrediction/HorticulturalSalesPrediction_API',所以所有这些东西都应该在 syspath 中可用。

我也试过做相对导入和绝对导入。但是通过这些尝试,我发现了 ValueError: attempted relative import beyond top-level packageImportError: attempted relative import with no known parent package 错误(例如,当我尝试 from . import optim_pipeline 时)。

尝试重新安装模块并更新 python。

更新HorticulturalSalesPrediction_API

所以我发现了我的错误。 解决方法是在HorticulturalSalesPrediction 文件夹中运行 python3 -m HorticulturalSalesPrediction_API.run。 然后,在研究了链接问题 python 中的导入在理论上是如何工作之后,它会像预期的那样工作,或者像我预期的那样工作... 我刚刚不得不调整一些导入:

from HorticulturalSalesPrediction_API.utils import helper_functions
from . import optim_pipeline

from HorticulturalSalesPrediction_API.utils import helper_functions
from HorticulturalSalesPrediction_API.preprocess import base_dataset
from HorticulturalSalesPrediction_API.optimization import optuna_optim