python 从子子目录导入

标签 python import

我的文件夹结构为:

mainapp.py
+Level1
   __init__.py
   +Level2
       helper.py
       __init__.py
       utilities.py
       testapp.py

在 mainapp.py 中,我希望导入 helper.py。我可以使用

来做到这一点
import Level1.Level2.helper

helper.py 已导入,但在尝试解析 helper.py 的导入时失败。在这种情况下,helper.py 有

from Level2 import utilities

这会抛出一个

ImportError: No module named Level2

我做错了什么?这是我试图导入的方式吗?我发现的所有示例都只是试图深入一层,我尝试遵循相同的指导但无济于事。

我正在使用Python3

编辑:LEVEL1 及以下是我下载的外部库。我无法修改它们。 level2 中有一个测试应用程序,它附带了使用帮助程序和实用程序的库。运行此测试应用程序有效。

但我需要能够使用我的主应用程序中的这些文件,该应用程序位于 2 个文件夹中

EDIT2:我相信我的问题源于我的工作目录是 mainapp.py 所在的目录。当我使用有效的完全限定路径 LEvel1.Level2.helper 导入时,但是一旦 helper 尝试导入 Level2,就会出现我当前的工作目录中没有 level2。有没有办法给这个别名?或者以某种方式让它们的导入相对于它们的位置,而不是我的工作目录?

最佳答案

当您运行 python 脚本时,执行脚本的位置非常重要,因为该路径成为 import(所有导入)将搜索的相对路径之一包/模块。我说的是sys.path .

因此,在对库一无所知的情况下,您可以简单地将 Level1 路径添加到 sys.path 中,并公开内部 Level2 > 分包到全世界。

假设您位于与 mainapp.py 位于同一文件夹中的 bash shell 中,您可以将 Level1 路径添加到 sys.pah使用PYTHONPATH :

$ export PYTHONPATH=./Level1

然后helper.py将能够找到utilities模块,甚至从外部执行您的mainapp.py >.

意见:

我不知道这个库及其工作原理,但在我看来,使用包名称本身从同一个包导入是不正确的,或者至少不是一个好的做法。这里有一个示例,只有在同一级别或父级别中才能导入该包。测试应用程序可能正在运行,因为正如您所说,它与实用程序位于同一包(级别)中。

原答案:

你需要的叫Intra-package References 。在您的具体情况下,utilitieshelper 位于您需要的同一级别:

from . import utilities

关于python 从子子目录导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345099/

相关文章:

python - 为什么我的 python 代码不打印任何东西?

Python 插件系统 - HOWTO

python - 使用 scrapy 抓取非拉丁域名

mysql - Magento 数据库错误 : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

r - 将数据导入R中的列数未知?

python - Django 使用 'python manage.py' runserver 代替 Gunicorn

python - 从 __init__.py 文件相对导入抛出错误

matlab - 如何将 .dat 文件导入 Matlab?

将非分隔的 .text 文件读入 R

从网络导入 Mathematica 中的表格 - 空单元格问题