2014-02-06 56 views
0

使用项目结构时遇到问题,如下所示:What is the best project structure for a Python application?在模块“x”中导入软件包“x”:防止导入自己并导入软件包

想象一下,一个项目布局是这样的:

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

斌/ project.py我想从包项目进口。

#project.py 
from project import foo 

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

由于项目结构的建议,我不知道为什么没有人有这样那样的问题......

+0

不要从该目录运行呢? – user2357112

+0

正如我所说,我不想改变项目结构,因为它似乎是“标准”布局 – S1lentSt0rm

回答

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

+0

我实际上使用python 3.3,python 3.3中的模块imp没有方法load_source – S1lentSt0rm

+0

添加了3.3+等效。 – XrXrXr

+0

感谢您的回复。我希望有一些“importpackage”语句,明确地只加载包并跳过单个文件模块以避免导入自己。你这样做的方式可能是一个解决方案(即使我得到一些奇怪的操作系统权限错误),但我想避免使用相对路径。我看到使用上面的例子没有太大的好处,而不是“sys.path.append(sys.path.pop(0))”。 – S1lentSt0rm