【问题标题】:Python import conflictPython 导入冲突
【发布时间】:2013-06-15 23:39:08
【问题描述】:

我最近构建了一个 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

我总是收到coreopal 下找不到的错误!!!

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

干杯

【问题讨论】:

    标签: python package conflict python-import


    【解决方案1】:

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

    您需要使用setuptools namespace setup 来启用此行为;使用符合setuptoolssetup.py 安装您的软件包,并让它为您注册和管理命名空间。

    如果您使用的是 Python 3.3 或更新版本,则可以使用新的 PEP 420 namespace support,您可以在其中保留顶级目录(或多个目录)为空 以创建一个命名空间,然后被合并。另请参阅 Python 3 导入系统文档中的 Namespace packages

    【讨论】:

    • debian 包的解决方案是什么?我们的用户和开发人员有两种选择,在 Linux 平台上通过 apt-get 或 Python 方式(setuptools)安装软件包。
    • 我相信Debian Python tools可以直接处理鸡蛋。应该存在正确的元数据,以便 setuptools 扩展可以找到不同的 opal 包,并确保 Python 将它们视为一个顶级命名空间。
    • 在 Python 3.3 及更高版本中,您可以在没有 setuptools 的情况下创建命名空间。 python.org/dev/peps/pep-0420 但是你不能使用 Python 3.2 或更重要的是 Python 2。
    • @LennartRegebro:我已经在写这方面的东西了。 :-)
    猜你喜欢
    • 2018-11-27
    • 2021-09-29
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2014-02-04
    相关资源
    最近更新 更多