嘿,我有一个树结构,每个目录/子目录中都有一个空的 init .py。但是,从主目录.py文件加载模块实用程序失败。
使用python 3.7
我的树如下所示:
C:.
├───Tests
│ ├───Checkout
│ ├───GlobalFooter
│ ├───GlobalHeader
│ │ └───__pycache__
│ ├───Home
│ │ └───__pycache__
│ ├───MyAccount
│ ├───ProductDetail
│ ├───ProductResults
│ │ └───__pycache__
│ └───SignIn
└───Utilities
└───__pycache__
我尝试了以下方法:
sys.path.insert(0, 'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities')
from Utilities.utils import addCookies, configureOptions
答案 0 :(得分:2)
如果要通过模块的包限定名称访问模块的整个树,则不应在Utilities
条目中包含sys.path
; from Utilities.utils import ...
假设sys.path
中的某个文件夹具有名为Utilities
的程序包/文件夹,其中包含名为utils
的子程序包/文件夹或名为{{1}的子模块/文件。 };通过将utils.py
添加到'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities'
,可以期望sys.path
(注意,将'C:/Web2/TSC.WebFactory.Web2.Tests/Utilities/Utilities/utils.py'
翻倍)。
这里的解决方案是从路径中删除该最终目录:
Utilities
现在sys.path.insert(0, 'C:/Web2/TSC.WebFactory.Web2.Tests')
将在from Utilities.utils import ...
中查找C:\Web2\TSC.WebFactory.Web2.Tests
,并按预期找到它。
旁注:如果要保留Windows标准反斜杠作为目录分隔符,则可以通过将路径设置为原始字符串文字,从而避免使用常量转义符,从而相当干净地使用它们:
Utilities\utils.py
答案 1 :(得分:0)
如果您还没有尝试过,请像执行sys.path.insert一样执行此操作,而不必在导入行上指定文件夹。
from utils import addCookies, configureOptions