命名空间包冲突

时间:2015-09-11 14:15:02

标签: python virtualenv namespace-package

我有一个我正在处理的包(LDB_Algebra)。它有一个额外的,取决于我创建的另一个包(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包。我还看到一个鸡蛋文件,LDB_Algebra-0.3.2-py2.7.egg。在ldb目录中的egg文件内部是一个__init__.py文件,其中包含相应的名称空间声明(如上所述)。据推测,这应该是从它获得ldb.algebra包的地方,但它不在那里。

问题:

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

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

1 个答案:

答案 0 :(得分:0)

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