2012-04-24 90 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