Python 从同一父目录中的不同文件夹导入模块时出错

Python 从同一父目录中的不同文件夹导入模块时出错,python,import,module,package,Python,Import,Module,Package,我有以下python包结构: rkstr8/cloud/batch.py rkstr8/profiling/test.py 我正试图将名为BatchJobListStatusPoller的类从batch.py导入test.py,但它给了我一个错误:ModuleNotFoundError:在test.py中运行此导入语句时,没有名为“rkstr8”的模块: 从rkstr8.cloud.batch导入BatchJobListStatusPoller rkstr8/文件夹以及cloud/和profi

我有以下python包结构:

rkstr8/cloud/batch.py
rkstr8/profiling/test.py
我正试图将名为
BatchJobListStatusPoller
的类从batch.py导入test.py,但它给了我一个错误:
ModuleNotFoundError:在test.py中运行此导入语句时,没有名为“rkstr8”的模块

从rkstr8.cloud.batch导入BatchJobListStatusPoller

rkstr8/文件夹以及cloud/和profiling/子文件夹都有一个
\uuuu init\uuuu.py


我做错了什么?

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

  • 第一种方法是直接在
    aws sfn教程
    文件夹中创建一个脚本,可以称为
    start\u test.py
    。它的唯一用途是在启动时调用
    test.py
    脚本,并向下传递任何命令行参数。
    这将允许您的
    test.py
    脚本能够正确地找到
    aws sfn教程
    文件夹中的所有python模块

  • 第二种方法是修改
    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 
    

    rkstr8是您项目的父文件夹吗?否,真正的父文件夹是
    aws sfn tutorial
    -->
    aws sfn tutorial/rkstr8/…
    您运行以启动程序的第一个文件在哪里?比如当你做
    python where.py
    的时候,我运行
    python test.py
    ,它在
    aws sfn教程/rkstr8/profiling/
    中,是的,我的答案中提到了问题。这实际上是不可能的,因为Python只在启动程序的目录/子目录中搜索导入。我会用你可能的解决方案更新我的答案。谢谢!我实施了第二个解决方案:)