【问题标题】:Error when importing module from a different folder in the same parent directory从同一父目录中的不同文件夹导入模块时出错
【发布时间】:2018-09-14 16:32:27
【问题描述】:

我有以下python包结构:

rkstr8/cloud/batch.py
rkstr8/profiling/test.py

我正在尝试将一个名为 BatchJobListStatusPoller 的类从 batch.py​​ 导入 test.py,但是当我在 test.py 中运行此导入语句时,它给了我错误:ModuleNotFoundError: No module named 'rkstr8'

from rkstr8.cloud.batch import BatchJobListStatusPoller

rkstr8/ 文件夹,以及 cloud/ 和 profiling/ 子文件夹都有一个__init__.py

我在这里做错了什么?

【问题讨论】:

  • rkstr8 是您项目的父文件夹吗?
  • 不,真正的父文件夹是aws-sfn-tutorial --> aws-sfn-tutorial/rkstr8/....
  • 您为启动程序而运行的第一个文件在哪里?就像你做python whatever.py
  • 我运行python test.py,在aws-sfn-tutorial/rkstr8/profiling/
  • 是的,我的回答中提到了这个问题。这实际上是不可能的,因为 Python 仅搜索启动程序的目录/子目录以进行导入。我会用你可能的解决方案更新我的答案。

标签: python import module package


【解决方案1】:

问题是因为 Python 只从您运行程序 python test.py 的目录/子目录导入模块。它还搜索 sys.path 变量中的模块,其中包括标准库模块和从 pip 安装的任何模块。我可以想到两种方法来解决这个问题,一种是更标准的方法,一种是更非正统的解决方法。

  1. 第一种方法是直接在aws-sfn-tutorial 文件夹中创建一个脚本,可能称为start_test.py。它的唯一目的是在启动时调用您的 test.py 脚本并向下传递任何命令行参数。
    这将使您的test.py 脚本能够正确找到aws-sfn-tutorial 文件夹中的所有python 模块。

  2. 第二种方法是修改test.py 中的sys.path 变量以添加要导入的文件的路径。

    • 您可以指定一个相对路径 ../,它将相对于当前路径向上移动一个文件夹
    • 或者您可以指定文件夹的绝对路径

示例 2:

import sys
sys.path.append('../') # Or use the absolute path here instead

# After adding to sys.path import your module
from cloud.batch import BatchJobListStatusPoller 

【讨论】:

  • 谢谢!我实施了第二个解决方案:)
猜你喜欢
  • 2021-05-24
  • 2021-03-09
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多