我的文件夹结构为:
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 。在您的具体情况下,utilities
和 helper
位于您需要的同一级别:
from . import utilities
关于python 从子子目录导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345099/