Hello list,<div><br><div>suppose I have three packages like this:</div><div><br></div><div>ingredients-base/</div><div>    ingredients/</div><div>        __init__.py</div><div>    setup.py   <-- this one only references package ingredients</div>

<div><br></div><div>ingredients-spam/</div><div>    ingredients/</div><div>        __init__.py</div><div>        spam/</div><div>            __init__.py</div><div>            recipe.py</div><div>    setup.py   <-- this one only references package ingredients.spam</div>

<div><br></div><div>ingredients-eggs/</div><div>    ingredients/</div><div>        __init__.py</div><div>        eggs/</div><div>            __init__.py</div><div>            recipe.py</div><div>    setup.py   <-- this one only references package ingredients.eggs</div>

<div><br></div><div>Now I can install these like this:</div><div><br></div><div>virtualenv env</div><div>env/bin/pip install file:///path/to/ingredients-base</div><div>env/bin/pip install file:///path/to/ingredients-spam</div>

<div>env/bin/pip install file:///path/to/ingredients-eggs</div><div><br></div><div>Now I have one source tree with the packages ingredients, ingredients.spam and ingredients.eggs all rolled into one, so that works OK. </div>

<div><br></div><div>But when I run pip uninstall for ingredients.spam, it also removes the source files for ingredients and ingredients.eggs. That seems a bit wrong, but maybe I'm using distutils/pip/setuptools the wrong way. I found out that if I modify top_level.txt in each of the egg-info directories that are installed so that they include the full package name, pip doesn't uninstall all the code. (And I didn't see any bad effects on the sys.path.) But I haven't found a non-hackish way to make top_level.txt contain the 'right' package name, so I think I'm not supposed to touch it, or even know that it's there. </div>

<div><br></div><div>I wasn't able to find much documentation on this top_level.txt file, but what I found suggested that it's used for run-time conflict resolution, not for package management. [1]</div><div><br></div>

<div>So my question is, how to make this scenario work? Just use different top-level package names and install them side-by-side? Looking at big projects such as Zope, Django or Twisted, they all seem to have gone the non-distutils route.</div>

<div><br></div><div>Before anyone asks why I want this; I want to split up some framework-type code and some utility-type code I have from some application-specific code, and I hope that this way I'll be able to accurately specify and install the dependencies between projects without running ever more risk of clashing with a top-level module name. But I'm open to the suggestion that my idea is totally misguided. :-)</div>

<div><br></div><div>Salutation,</div><div><br></div><div>Joost Molenaar</div><div><br></div><div>[1] <a href="http://svn.python.org/projects/sandbox/trunk/setuptools/doc/formats.txt">http://svn.python.org/projects/sandbox/trunk/setuptools/doc/formats.txt</a></div>

</div>