2012-07-10 33 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'中)。