Python 模块导入 3.7

Python Module import 3.7

嘿,我有一个树结构,每个 directory/subdirectory 中都有一个空的 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

如果您还没有尝试过,请像执行 sys.path.insert 时一样执行此操作,您不必在导入行中指定文件夹。

from utils import addCookies, configureOptions

如果您想通过包限定名称访问整个模块树,则不应在 sys.path 条目中包含 Utilitiesfrom Utilities.utils import ... 假定 sys.path 中的某个文件夹有一个名为 Utilities 的 package/folder,其中包含一个名为 utils 的子 package/folder 或一个 submodule/file 命名为 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 中查找 Utilities\utils.py 并按预期找到它。

旁注:如果你想保持 Windows 标准反斜杠作为目录分隔符,你可以通过将路径设为原始字符串文字来相当干净地使用它们,避免不断转义的需要:

sys.path.insert(0, r'C:\Web2\TSC.WebFactory.Web2.Tests')