1

我最近构建了一个 Python 包并通过 Debian 打包器安装了它。它安装在我的系统上,因此我可以在其他项目中使用它。在我的新项目中,我有一个包文件夹的相同名称,即 opal。我扫描了包括这个网站在内的网络,一切都指向使用:

from __future__ import absolute_import

不幸的是,它无法解决问题,我怀疑我遗漏了一个细节。

我正在使用 Python 2.7.3,这是我的项目文件夹结构:

安装包结构:

- opal
     __init__.py
     core.py

新项目结构:

- opal
  - __init__.py
  - net.py

在新项目中我不能这样做:

from opal.core import OpalClient

我总是得到一个在!!!core下找不到的错误opal

如果__future__是解决方案,有人可以给我一个例子。我尝试了几种方法,但总是出错。对于如此简洁的语言,我发现这是一个尴尬的问题;)

干杯

4

1 回答 1

1

Python 不会在没有额外帮助的情况下合并命名空间。opal在找到另一个顶级包之前,您在一个地方找到了一个顶级opal包。找到的第一个包opal.net作为包含模块,但不是opal.core模块。

您需要使用setuptools 命名空间设置来启用此行为;setuptools使用兼容的方式安装您的软件包,setup.py并让它为您注册和管理命名空间。

如果您使用的是 Python 3.3 或更新版本,则可以使用新的PEP 420 命名空间支持,您可以将顶级目录(或多个目录)留空,以创建随后可以合并的命名空间。另请参阅Python 3 导入系统文档中的命名空间包

于 2013-06-19T12:32:01.057 回答