我很难构建我的Python setup.py文件来做我想做的事情。我有一个这样的pacakge设置:
somestuff_root/
setup.py
myutils/
__init__.py
a/
__init__.py
somestuff.py
我有另外一个这样的软件包设置:
otherstuff_root/
setup.py
myutils/
__init__.py
b/
__init__.py
otherstuff.py
所以事情在我的site-packages /目录中组织,如:
myutils/
a/
somestuff.py
b/
otherstuff.py
这是我用pip安装它们后我想要的。
我的问题是卸载第二个软件包(带有pip)也会消除第一个软件包 - 这不是我想要发生的事情。我希望它只是删除myutils.b并将myutils.a保持原样。
我怀疑使用myutils /文件夹中有多个 init .py文件会让我感到困惑,但我不确定如何让这些文件正常工作。
-
还找到了这个有用的页面:
http://www.sourceweaver.com/musings/posts/python-namespace-packages
答案 0 :(得分:3)
如果我正确理解了这一点,那么您要设置的是命名空间包(一个空包,其中包含其他单独安装的包),这是一个feature of setuptools。
使用setuptools.setup()
参数名称空间的包列表调用namespace_packages
。
setup(..., namespace_packages=['myutils'], ...)
然后,创建仅包含以下内容的myutils/__init__.py
:
__import__('pkg_resources').declare_namespace(__name__)
最后,在myutils/a/__init__.py
和myutils/b/__init__.py
调用pkg_resources.declare_namespace('myutils')
,这可确保在首先安装较低级别的包时创建命名空间。
我很确定它的工作原理。我还在学习安装工具,所以如果我错了,我会非常感谢修正。