如何在Python中使用顶级路径导入?

如何在Python中使用顶级路径导入?,python,package,Python,Package,我正在开发一个python框架,并希望基于顶级包(项目名称)进行导入。用户将通过复制整个框架并在其中编写自己的模块来使用该框架 我当前的结构如下所示: myapp/ config.py docs/ framework/ main.py utils.py file.py lib/ some_module.py unit_tests/ test_utils.py 我希望能够以以下方式在lib和unit_测试中的python文件中使用以下导入:

我正在开发一个python框架,并希望基于顶级包(项目名称)进行导入。用户将通过复制整个框架并在其中编写自己的模块来使用该框架

我当前的结构如下所示:

myapp/
  config.py
  docs/
  framework/
    main.py
    utils.py
  file.py
  lib/
    some_module.py
  unit_tests/
    test_utils.py
我希望能够以以下方式在lib和unit_测试中的python文件中使用以下导入:

from myapp.framework import utils
有没有一个简单的方法可以做到这一点?我已经尝试过使用sys.path.append()方法,但实际上并不奏效。如果有一个真正的python方法来实现这一点,我不介意付出额外的努力来让它工作


编辑:我再次尝试了sys.path.append(),它确实可以工作,但它确实是一个优雅的解决方案,我真的很想知道是否还有其他方法。

简而言之:不能有两个同名的模块,一个在另一个内部。您有
myapp
文件夹和
myapp.py
文件

这是因为导入模块的顺序

  • 在当前目录中
  • 当前的一揽子计划
  • 全局包文件夹
  • 因此,如果您试图导入config.py中的myapp.lib.some_module,解释器将首先看到您在同一文件夹中有myapp.py,并以文字方式尝试从该文件导入
    lib.some_module
    ,该文件不存在

    可能是试图从该模块外部导入
    myapp.myapp.lib.some_模块


    因此,最好的方法是重命名
    myapp.py
    文件

    为什么
    sys.path.append()
    不起作用?@ire\u and\u curses-我不确定sys.path.append()为什么不起作用,因为我无法实现我想要的导入。但是,根据我的研究,似乎不建议添加到路径。非常类似:对不起,myapp.py文件应该是一个占位符文件,以显示还有其他文件。它实际上并不存在于框架中。我不可能编辑它。