【问题标题】:ModuleNotFoundError on different OS with same setup for local packageModuleNotFoundError 在不同的操作系统上具有相同的本地包设置
【发布时间】:2020-07-23 01:25:03
【问题描述】:

本质上,主要问题是在 Ubuntu 上没有看到用于导入的包,而在 Windows 上用于 Git Bash。

这是相关的目录结构,其中库文件夹是有问题的包/模块。

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

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

from library.module import function

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

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

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

注意:我看到了this question,这看起来与我的问题非常相似,但是向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

【问题讨论】:

  • 您尝试在 Ubuntu 上向 PYTHONPATH 添加什么?
  • @forty_two 文章末尾提到的所有项目都是我添加的。
  • @forty_two 澄清一下,echo "$PYTHONPATH" 的输出中用冒号分隔的每个项目都是我添加的。
  • 知道了,感谢您的澄清。您是否尝试将项目目录添加到PYTHONPATH;类似export PYTHONPATH=$PYTHONPATH:/path/to/project-dir/?
  • @forty_two 这确实会导致它工作,但考虑到 Git Bash 不需要它,我不明白为什么需要这样做。

标签: python module package python-import importerror


【解决方案1】:

由于没有人发布答案,而 @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 模块在任何其他导入发生之前导入项目路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2017-03-14
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多