我知道在这些页面中已经回答了类似的问题,但我已经阅读了所有答案,但找不到能让我的细微差别的应用程序正常工作的解决方案。长短:
我想将一个外部模块(只存在于相对路径中,我无法更新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
的模块有什么想法吗?
答案 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设置进行此路径操作。