不同 OS 上的 ModuleNotFoundError,本地包设置相同

ModuleNotFoundError on different OS with same setup for local package

本质上,主要问题是在 Ubuntu 上没有看到要导入的包,而在 Windows.[=22 上是 Git Bash =]

这是相关的目录结构,库文件夹是有问题的 package/module。

project-dir/
    services/
        task.py
    library/
        __init__.py
        module.py

task.py 文件中,我有采用以下语法的导入:

from library.module import function

project-dir 文件夹中,我 运行 以下命令:python services/task.py.

在 Git Bash 在 Windows 上,这非常有效。但是,在 Ubuntu 上,我得到了一个 ModuleNotFoundError 抛出。以下是抽象的上述错误:

Traceback (most recent call last):
  File "services/task.py", line 3, in <module>
    from library.module function
ModuleNotFoundError: No module named 'library'

注意:我看到 ,这看起来与我的问题非常相似,但是向 PYTHONPATH 添加内容并没有解决问题。这是 PYTHONPATH 对我的输出:

/home/username/.local/lib/python3.6/site-packages:/usr/lib/python3.6:/usr/lib/python3.6/lib-dynload:/usr/local/lib/python3.6/dist-packages:/usr/lib/python3/dist-packages

由于没有人发布答案,@forty_two 恰好让我了解了我需要做什么,我将解释我对他的建议的实施。

我在服务目录中创建了一个名为 add_project_path.py 的文件。脚本内容如下:

import sys
import os

# Adds the project path
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

这会获取 add_project_path.py 的路径,获取它所在的目录,并获取该目录的父目录,即项目文件夹。然后,将项目文件夹添加到路径中,问题就解决了。

编辑:

此外,为了进一步解释,我在 task.py 的导入顶部添加了 import add_project_path,这允许 add_project_path 模块在任何其他模块之前导入项目路径发生进口。