从__init__.py中的相对位置导入单独的模块

时间:2014-06-04 04:01:43

标签: python import module

我知道在这些页面中已经回答了类似的问题,但我已经阅读了所有答案,但找不到能让我的细微差别的应用程序正常工作的解决方案。长短:

我想将一个外部模块(只存在于相对路径中,我无法更新PATH变量)暴露给我的工作模块。在每种情况下,我都认识到我可以使用sys.path.append()/ import导入模块。但是,我想在我的__init__.py中导入模块并将其暴露给那里的模块(所以我只需要调整路径一次,理论上)。我读过的所有内容都表明,一旦我通过__init__.py中的导入公开了模块,我就可以通过调用my_module.imported_module来访问它。但是,这似乎不起作用。基本思想是在多个模块之间共享一组功能,这些功能也应该是独立的。示例如下:

(基础模块):

__init__.py:
import sys
sys.path.append('../') # I know this is not ideal, but for simplicity
import core

myfile:
import base
print dir(core)

NameError:名称'core'未定义

可替换地:

myfile:
import base
print dir(base.core)

AttributeError:'module'对象没有属性'core'

最后:

myfile:
import base.core
print dir(base.core)

ImportError:没有名为core

的模块

**最后,最后:

最后:

myfile:
import core
print dir(core)

ImportError:没有名为core

的模块

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你真的没有选择,如果它是主模块之外的目录中的相对路径,你将不得不操纵路径。您应该更改sys.path操作以使用__file__,这样您就不会直接使用当前的工作,即:

import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__))

但是,如果其他软件包与您的文件共享一个软件包,则可以使用相对导入:

parent/
    __init__.py
    core.py
    base/
        __init__.py
        myfile.py

您也可以在.pythonrc或使用ipython设置进行此路径操作。