设置sys.path以使父模块路径不导入子模块

时间:2015-12-21 23:17:02

标签: python-3.x python-import

该项目在Python3中:

Project
|
  Mymodule
  __init__.py
  |  
   submodule1
   __init__.py
   some_script.py
  |
   submodule2
   __init__.py
   myclass.py -> implements MyCLass

每当我运行脚本时,我都从Project目录开始。我总是从这个项目位置执行

Mymodule.submodule1.some_script.py中,我想导入位于MyClass

中的some_script.py内的submodule2

some_script.py

中有效的内容
from ..submodule2.myclass import MyClass
from Mymodule.submodule2.myclass import MyClass

我想要实现的是避免在我的子模块中的脚本文件中基于位置的相对引用。我什么时候尝试导入模块它应该在当前目录中搜索,如果没有找到,则转到sys.path

所以我的解决方案位于my __init__.py

submodule1
import os
import sys
sys.path.append(os.path.abspath('./Mymodule')) -> cwd will be "Project"

如果我导入

,现在在some_script.py
from submodule2.myclass import MyClass

这应该有效,因为我有一个到根/父模块(Mymodule)的sys.path条目。我已通过some_script.py

中的print(sys.path)验证了这一点

这总是会引发错误:

ImportError: No module named 'submodule2.myclass

为什么不考虑sys.path来搜索模块。

1 个答案:

答案 0 :(得分:0)

我能够找出问题所在。在我的sys.path中,已经有一个类似命名的模块(子模块2)在我当前项目路径之前的不同路径中。所以python在搜索模块时遇到的第一个模块中搜索文件,该模块位于不同的位置

打印(sys.path中)

\ somepath:...:....:...:\ myproject_path

\ somepath - >具有类似名称的模块(子模块2)

\ myproject_path - >我的模块具有类似名称submodule2