构建一个名称空间包,以便通过$ PYTHONPATH使用

时间:2014-10-03 12:45:45

标签: python setuptools namespace-package

这是一个有点笨拙措辞的问题,但基本上是:

  • 我只能通过添加到$ PYTHONPATH
  • 来激活python包
  • 我希望能够以这种方式使用任意python包
  • 一些python包使用包命名空间

我有一个用于构建python包的包装器脚本,它主要只是setup.py --single-version-externally-managed。我可以在构建过程中添加任何我想要的东西 - 但它必须是通用的,因为它用于构建大量的包。

通常,我可以将构建结果添加到$ PYTHONPATH,一切都很好。

但是对于命名空间包(例如ndg-httpsclient),它看起来很像它们只能在指定的site-packages目录中工作,因为它们使用.pth个文件。

令人困惑的是 源中的ndg/__init__.py,其中包含命名空间包样板代码:

__import__('pkg_resources').declare_namespace(__name__)

所以看起来它应该可以直接导入$PYTHONPATH,但随后安装嘲讽我:

Skipping installation of /<some-build-dir>/site-packages/ndg/__init__.py (namespace package)

据推测它有充分的理由这样做,但它依赖于.pth文件意味着结果不能通过$PYTHONPATH使用,只能将其复制到一个众所周知的位置,我无法出于技术原因。我也无法在应用程序初始化中注入任意python(所以site.addsitedir()也出来了。)

那么,是否有一些我不知道如何将名称空间模块导入而不将其置于一个众所周知的位置?或者,有没有办法说服setuptools不要跳过__init__.py - 这实际上有用吗?

0 个答案:

没有答案