Python模块,引用同一包中的其他模块?
我有一个简单的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导入重要函数的操作。但是,尝试这样做会导致没有名为
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
方法。