2012-04-24 85 views
2

我有一個簡單的Python包目錄結構如下:Python模塊,引用同一包中的其他模塊?

wibble 
| 
|-----foo 
|  |----ping.py 
| 
|-----bar 
|  |----pong.py 

簡單的問題:我將如何引用ping.py函數/類從pong.py?仔細查看文檔,這看起來就像在wibblefoobar的根目錄中創建__init__.py文件一樣簡單,然後從pong.py開始執行類似from wibble.foo.ping import important_function的操作。然而,嘗試這導致No module named wibble.foo.ping

我確定我錯過了某處文檔中的某些東西,因爲這一定是可以做到的。我對modulenamespace之間的區別也有點朦朧,我的背景是c#.net,所以這裏的任何類比都會有用。

回答

2

你需要添加維布勒到Python路徑(見the official documentation),一種方式是

import sys 
sys.path.append('/path/to/wibble') 

另一種方法是使用環境變量PYTHONPATH

export PYTHONPATH=$PYTHONPATH:/path/to/wibble 
+1

在Windows上,所以這將是'PATH =%PATH%; c:\ path \ to \ wibble'(只是因爲c#.net引用而猜測) – alan 2012-04-24 19:56:33

+0

我應該說 - 這是在* nix上開發的。我對這個解決方案的擔憂是,它將包的絕對位置與代碼庫/基礎結構聯繫起來很困難。鑑於這些文件相對於對方而言很容易定位,爲什麼'pong'不知道它在'wibble'包中,然後通過這種方式找到'ping'? – growse 2012-04-24 19:58:09

+0

你可以大致猜測pong.py文件的位置,並將wibble文件夾添加到python路徑中,但是如果你使用setup.py這樣的代碼包,代碼會很麻煩,但是這裏的問題是錯誤的做法 – diegueus9 2012-04-24 19:59:59