2012-07-10 29 views
1

如果将文件导入到同一文件夹中的其他文件中。python import in same folder

文件结构:

. 
├── b 
│   ├── c.py 
│   ├── d.py 
│   └── __init__.py 
└── __init__.py 

在d.py:

import b.c 
print "import successfully" 

更新1

我同时使用

python d.py 

和:

python b/d.py 

程序无法运行并引发ImportError。

为了解决这个问题,我用

sys.path.insert(0, realpath(path_join(dirname(__file__), '../'))) 

然而,它并不像看起来的标准方式。

像一些着名的项目:龙卷风或一些什么,总是使用这种结构。但没有插入行。

自动测试工具,如嗅探器,autonose可以运行这样的结构,如果导入句子在单元测试文件中。

我不知道为什么。

PEP328或PEP366不给我一个很好的解决方案。

PEP8推荐我这样做。

的问题也出现在进口的另一模块(在另一个文件) 如:

├── a 
│   ├── e.py 
│   └── __init__.py 
├── b 
│   ├── c.py 
│   ├── d.py 
│   └── __init__.py 
├── __init__.py 
+0

这个答案[exists here](http://stackoverflow.com/a/6098238),[这里](http://stackoverflow.com/a/456491) – invert 2012-07-10 09:39:04

+0

@invert我看到这个方法,它可以做这件事。但是有人的代码以这种方式成功运行。但没有插入路径句子。 – chao787 2012-07-10 09:40:05

回答

1

您应该使用python b/d.py而不是python d.py

-1

根据PEP328,下面的代码应该可以工作。

from . import c 

我的理解是否正确?

+0

这给了我:''ValueError:尝试在非包中的相对导入“' – invert 2012-07-10 09:30:19

+0

@invert也许你会从__future__中添加__导入文件中的absolute_path。相对路径是一个python 3特性。 – chao787 2012-07-10 09:32:02

+0

@ Vinayak-Kolagi不推荐使用相对路径,你有一些想法将模块当作模块处理,但不是以系统方式处理? – chao787 2012-07-10 09:35:51

0

Vinayak的答案完美适用于Python v3.3.2。 如果在目录'dir'中存在一堆非OOP Python模块,则可以成功将任何存在于'dir'中的文件导入文件(也存在于'dir'中)。