In my case, packages which I'm interested in (these perl modules from my other question) are all in world file.
–
AlexDOct 2 '11 at 11:24

2

When you put stuff in world, it means "I depend on this". I.e. you are the dependency. Remove the packages that you don't explicitly need from your world file. When you emerge things you don't explicitly need, use the --oneshot option.
–
MatOct 2 '11 at 11:28

Adding to the previous comment by Mat: A proper command-line way to remove such packages from world is emerge --deselect package_atom, where package_atom can be simply the name of package (for more, see man portage).
–
rozcietrzewiaczOct 2 '11 at 13:13

These packages are installed by puppet recipe so using --oneshot will require modifying puppet sources, and I need these packages included in world file in production anyway so they won't be removed by regular depclean (these packages are dependencies of large web application which is not properly packaged yet). But right now I need to clean these packages from test system and removing these packages by hand from world file (or from system) is exactly task which I'm trying to avoid.
–
AlexDOct 7 '11 at 7:19

You can't have it both ways - tell the system they are required, then ask it for them to be cleaned up automatically. You need to track what you're doing. Sets will help a bit, but as you said in another comment it's not bullet-proof. You could also simply record all your emerge actions (with a simple wrapper) and use that to backtrack your changes.
–
MatOct 7 '11 at 7:22

If you want to see what packages in the @world set are not also dependencies of other installed packages, you can run emerge --pretend --depclean @world (or emerge -pc @world). Also note that if you try to remove a package using emerge --depclean atom (instead of emerge --unmerge atom), portage will only remove the package if nothing else depends on it.