Python模块,引用同一包中的其他模块?

Python模块,引用同一包中的其他模块?,python,module,package,Python,Module,Package,我有一个简单的python包,具有以下目录结构: wibble | |-----foo | |----ping.py | |-----bar | |----pong.py 简单问题:如何从pong.py引用ping.py中的函数/类?查看文档,这似乎很简单,只需在wibble、foo和bar的根目录中创建\uuuu init\uuuuuuuuuuuuy.py文件,然后从pong.py执行类似于从wibble.foo.ping导入重要函数的操作。但是,尝试这样做会导致没有名为

我有一个简单的python包,具有以下目录结构:

wibble
|
|-----foo
|      |----ping.py
|
|-----bar
|      |----pong.py
简单问题:如何从
pong.py
引用
ping.py
中的函数/类?查看文档,这似乎很简单,只需在
wibble
foo
bar
的根目录中创建
\uuuu init\uuuuuuuuuuuuy.py
文件,然后从
pong.py
执行类似于从wibble.foo.ping导入重要函数的操作。但是,尝试这样做会导致
没有名为wibble.foo.ping的模块


我确信我在文档中的某个地方遗漏了一些东西,因为这必须是可能的。我对
模块
名称空间
之间的区别也有点模糊,我的背景是c#.net,所以这里的任何类比都是有用的。

您需要将wibble添加到python路径(请参阅),一种方法是

import sys
sys.path.append('/path/to/wibble')
另一种方法是使用环境变量PYTHONPATH

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

在Windows上,因此它将是
PATH=%PATH%;c:\path\to\wibble
(只是因为c#.net引用而猜测。)我应该说-这是在*nix上开发的。我对这个解决方案的担忧是,它很难将包的绝对位置与代码库/基础设施联系起来。既然这些文件很容易相对定位,为什么
pong
不能知道它在
wibble
包中,然后用这种方式定位
ping
呢?你可以直接猜测pong.py文件的位置,并将wibble文件夹添加到python路径中,但这显然是一种不好的做法。如果您在包中使用类似setup.py的东西,代码将正常运行,但这里的问题是:您的文件夹wibble不在python路径中。我同意猜测是一种不好的做法。我将在
ping
pong
上尝试
sys.path.append
方法。