在模块“x”中导入包“x”:阻止导入自身并改为导入包

时间:2014-02-06 00:10:42

标签: python-3.x pythonpath project-structure

在使用此处建议的项目结构时遇到问题:What is the best project structure for a Python application?

想象一下像这样的项目布局:

Project/
|-- bin/
|   |-- project.py
|
|-- project/
|   |-- __init__.py
|   |-- foo.py

bin / project.py 中我想从包项目导入。

#project.py
from project import foo

由于运行 bin / project.py 时sys.path [0]始终是 Project / bin ,因此它会尝试导入模块 bin / project。 py (本身)导致属性错误。有没有办法使用这个项目布局而不在模块 bin / project.py 中使用sys.path?我基本上需要一个“importpackage”语句,忽略具有相同名称的模块。

由于建议了项目结构,我想知道为什么没有其他人有这种问题......

1 个答案:

答案 0 :(得分:1)

你可以尝试:

import imp
module_name = imp.load_source('project','../project')

module_name将是包。

编辑:

对于python 3.3 +

import importlib.machinery

loader = importlib.machinery.SourceFileLoader("project", "../project")
foo = loader.load_module("project")

Source