2011-08-24 90 views
2

我很难构建我的Python setup.py文件来做我想做的事情。我有一个pacakge设立这样的:Python:多个包含多个setup.py文件的包

somestuff_root/ 
    setup.py 
    myutils/ 
     __init__.py 
     a/ 
      __init__.py 
      somestuff.py 

我有这样的另一个软件包的设置:

otherstuff_root/ 
    setup.py 
    myutils/ 
     __init__.py 
     b/ 
      __init__.py 
      otherstuff.py 

这样的事情在我的站点包组织/目录,如:

myutils/ 
    a/ 
     somestuff.py 
    b/ 
     otherstuff.py 

这正是我想在用pip安装它们之后所需要的。

我的问题是,卸载第二个包(使用点)也抹去了第一个 - 这不是我想要发生的。我希望它只是删除myutils.b并将myutils.a保留在原来的位置。

我怀疑我有多个init .py文件与myutils /文件夹混淆的事情,但我不知道如何让这些工作正常。

-

还发现这是很有帮助页:

http://www.sourceweaver.com/musings/posts/python-namespace-packages

回答

2

如果我正确理解这一点,你正在尝试建立一个命名空间包(包含一个空包其他,单独安装的软件包),这是一个feature of setuptools

调用setuptools.setup(),其中包含namespace_packages参数的名称空间的包列表。

setup(..., namespace_packages=['myutils'], ...) 

然后,创建仅myutils/__init__.py含有下列:

__import__('pkg_resources').declare_namespace(__name__) 

最后,在myutils/a/__init__.pymyutils/b/__init__.py呼叫pkg_resources.declare_namespace('myutils'),这确保如果一个较低级的包被首先安装在命名空间被创建。

我很确定这是它的工作原理。我仍然在学习setuptools,所以如果我错了,非常感谢更正。