Skip to main content
 首页 » 编程设计

python之ImportError之在同一级别使用 Python 包

2025年05月04日9jackei

我有两个 Python 包,其中一个需要由另一个导入。目录结构如下:

workspace/ 
  management/ 
    __init__.py 
    handle_management.py 
    other_management.py 
  utils/ 
    __init__.py 
    utils_dict.py 

我正在尝试从 handle_management.py 文件中的 utils 项目导入功能:

import utils.utils_dict 

尝试运行 handle_management.py 时出现错误:

ImportError: No module named utils.utils_dict 

我已经阅读了很多关于如何解决这个问题的资料,但我似乎找不到有效的解决方案。

我从 Import a module from a relative path 开始- 我尝试了适用的解决方案,但没有一个奏效。

是通过 site_packages 使 workspace/ 可用的唯一解决方案吗?如果是这样,最好的方法是什么?

编辑:

我尝试将 /home/rico/workspace/ 添加到 PYTHONPATH - 没有成功。

编辑 2:

我能够成功使用 klobucar 的解决方案,但我认为它不会作为通用解决方案工作,因为该实用程序将被其他几个开发人员使用。我知道我可以使用一些 Python 概括来确定每个用户的相对路径。我只是觉得有一个更优雅的解决方案。

最终,该脚本将通过 cron 运行,以对多个 Python 项目执行单元测试。这也将提供给每个开发人员,以确保在他们的开发过程中进行集成测试。

我需要能够使它更通用。

编辑 3:

抱歉,我不太喜欢这些解决方案中的任何一个来实现我想要完成的目标。我感谢您的意见 - 我将它们用作临时修复。作为一个完整的解决方案,我将研究添加一个位于 site_packages 目录中的可用脚本,该脚本将添加到 PYTHONPATH。这是跨多台机器和多位开发人员所需要的东西。

一旦我构建了完整的解决方案,我将在此处发布我所做的并将其标记为解决方案。

编辑 4:

这个问题我感觉好像没表达好我的需求。下面的答案很好地解决了这个问题——但不是我的实际需要。因此,我在另一篇文章中重组了我的问题。我考虑过编辑这个,但下面的答案(这对其他人非常有帮助)对更改没有意义,而且看起来不合适且无关紧要。

有关此问题的修订版本,请参阅 Unable to import Python package universally

请您参考如下方法:

您有 2 个解决方案:

要么将工作区放在你的 PYTHONPATH 中:

import sys 
sys.path.append('/path/to/workspace') 
 
from utils import utils_dict 

(请注意,如果您在工作区内运行脚本,即导入 handle_management,工作区很可能已经在您的 PYTHONPATH 中,您不需要这样做,但这里似乎不是这种情况)。

或者,通过在工作区目录中添加一个空的(或不空的)__init__.py 文件使“工作区”成为一个包。然后:

from ..utils import utils_dict 

我更喜欢第二种,因为如果你的 PYTHONPATH 中有另一个名为“utils”的模块,你就会遇到问题

除此之外,您在此处导入错误:import utils.utils_dict.py。您不需要包含文件“.py”的扩展名。您不是在导入文件,而是在导入模块(如果是文件夹,则为包),因此您不需要该文件的路径,您需要它姓名。