命名空间包冲突

Namespace package conflict

我有一个正在处理的包 (LDB_Algebra). It has an extra that depends on another package that I created (LDB_LAPACK)。我已经创建了一个 virtualenv 并安装了这些软件包中的每一个,如下所示:

$ virtualenv -p pypy ve_pypy
$ . ve_pypy/bin/activate
(ve_pypy) $ pip install LDB_LAPACK
...
(ve_pypy) $ python setup.py install
... (Installs LDB_Algebra)

每个在 ldb 包下的 __init__.py 文件都有以下内容:

__import__('pkg_resources').declare_namespace(__name__)

问题:

问题是,当我尝试使用ldb.algebra时,它报告找不到包。只是为了确保它没有完全丢失我尝试导入 ldb.lapack 的所有内容并且工作正常。这向我表明我遇到了命名空间包问题。似乎有人问过类似的问题 here(遗憾的是没有答案)。在调查我的 virtualenv 的目录结构后,我发现 ve_pypy/site-packages/ 下有一个 ldb 命名空间包的文件夹,其中包含 lapack 包但不包含 algebra 包。我还看到了一个 egg 文件,LDB_Algebra-0.3.2-py2.7.eggldb 目录中的这个 egg 文件中有一个 __init__.py 文件,其中包含适当的命名空间声明(如上所述)。据推测,这应该是它从中获取 ldb.algebra 包的地方,但它并没有在那里寻找。

问题:

  1. 任何人都可以通过参考确认我所看到的是一个已知问题(即我不只是做了一些轻微的错误导致了所有这些麻烦)? eggs和w/e创建的pip install方法(site-packages下的ldb包目录)根本不兼容吗?

  2. 假设第一个问题的答案是我的包安装方法存在根本性缺陷,是否有更简单的方法从 pypi 安装 LDB_LAPACK 包和 LDB_Algebra 本地目录中的包?我不是 setuptools wiz 或任何东西,所以答案可能非常简单(不要忽视显而易见的)。

显然这是 well known problem。向我建议并且似乎工作正常的解决方案是使用 pip install . 而不是 python setup.py install.