这是一个措辞有点尴尬的问题,但基本上:
- 我只能通过添加到 $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
-- 并且这真的有效吗?