我认为我要提出的问题是一个非常琐碎的问题,已经被许多人提出并因此得到了回答。我已经仔细研究了为该问题提供的解决方案,但是在我的情况下我认为该解决方案不起作用。
我有以下目录层次结构。
----a
-------__init__.py
--------------aa
------------------aa.py
------------------__init__.py
--------------bb
------------------bb.py
------------------__init__.py
-------a.py
我想做以下事情。
通过查看许多解决方案,我将__init__.py
文件放置在每个文件夹目录中。
我用了:
import imp
foo = imp.load_source('module.name', 'path to the file')
这行得通,但是由于必须对路径进行硬编码,因此我不确定这是否是可行的解决方案
目前,我正在通过将路径添加到sys目录来进行导入。我想要一个更具动态性的解决方案。
我的项目的文件夹层次结构深入到6-7级子目录,我需要一种解决方案来从7级导入1级模块。
如果有人能指出我所缺少的内容,我会感到很高兴。
您的应用程序的切入点是什么?例如,如果您从命令行启动aa.py
文件,那么您将不走运。
“ Guido将程序包中正在运行的脚本视为反模式”(被拒绝的PEP-3122)
程序包的入口点应位于程序包根目录中的某处。在您的情况下,这是一个文件a.py
。从那里,您像往常一样导入一些内部模块:
# contents of a.py
from aa import a
现在,关于从包装中导入的内容。
假设aa1.py
与相同的目录中还有一个文件aa.py
。要从中导入,aa.py
可以使用相对导入功能
# contents of aa.py
from . import aa1
这里的.
意思是“在同一目录中”。
其他例子:
# contents of aa.py
from .. import a # here .. means "one level above"
from ..bb import bb # this will import your bb.py module
请注意,例如,如果您直接从命令行运行,所有导入将失败aa.py
!
更新:
.
和..
上面的例子并不目录的名称。这是python语法,表示“相同级别”,“高于一个级别”等。如果您需要从高于3个级别导入,则应编写:
from .... import my_module
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句