{"action":"created","issue":{"url":"https://api.github.com/repos/pypa/pip/issues/2848","labels_url":"https://api.github.com/repos/pypa/pip/issues/2848/labels{/name}","comments_url":"https://api.github.com/repos/pypa/pip/issues/2848/comments","events_url":"https://api.github.com/repos/pypa/pip/issues/2848/events","html_url":"https://github.com/pypa/pip/issues/2848","id":83382655,"number":2848,"title":"proposal: linked package repositroy installation","user":{"login":"RonnyPfannschmidt","id":156838,"avatar_url":"https://avatars.githubusercontent.com/u/156838?v=3","gravatar_id":"","url":"https://api.github.com/users/RonnyPfannschmidt","html_url":"https://github.com/RonnyPfannschmidt","followers_url":"https://api.github.com/users/RonnyPfannschmidt/followers","following_url":"https://api.github.com/users/RonnyPfannschmidt/following{/other_user}","gists_url":"https://api.github.com/users/RonnyPfannschmidt/gists{/gist_id}","starred_url":"https://api.github.com/users/RonnyPfannschmidt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RonnyPfannschmidt/subscriptions","organizations_url":"https://api.github.com/users/RonnyPfannschmidt/orgs","repos_url":"https://api.github.com/users/RonnyPfannschmidt/repos","events_url":"https://api.github.com/users/RonnyPfannschmidt/events{/privacy}","received_events_url":"https://api.github.com/users/RonnyPfannschmidt/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-06-01T08:26:04Z","updated_at":"2015-06-01T13:29:42Z","closed_at":null,"body":"given that pip now creates wheels on its own,\r\ni propose to extend on that to help minimize the size of virtualenvs in immutable deployments\r\n\r\nthe basic idea is that instead of unpacking each wheel into each virtualenv, compiling python files there,\r\nall wheels are unpacked/preinstalled in version+abi tagged folders, then installation would only symlink and deinstallation would only unlink the toplevels of such a setup\r\n\r\nthe gains would be \"massive\", 100 deployments of a medium sized django app would take up just a few hundred megabytes instead of dozes of gigabytes\r\n\r\nan additional gain would be even faster installs (typically 2 symlinks for toplevel + dist-info), maybe creating scripts\r\n\r\nits reasonably safe to assume that creating a few symlinks + scripts is orders of magnitude faster than writing out symlinks"},"comment":{"url":"https://api.github.com/repos/pypa/pip/issues/comments/107466845","html_url":"https://github.com/pypa/pip/issues/2848#issuecomment-107466845","issue_url":"https://api.github.com/repos/pypa/pip/issues/2848","id":107466845,"user":{"login":"dstufft","id":145979,"avatar_url":"https://avatars.githubusercontent.com/u/145979?v=3","gravatar_id":"","url":"https://api.github.com/users/dstufft","html_url":"https://github.com/dstufft","followers_url":"https://api.github.com/users/dstufft/followers","following_url":"https://api.github.com/users/dstufft/following{/other_user}","gists_url":"https://api.github.com/users/dstufft/gists{/gist_id}","starred_url":"https://api.github.com/users/dstufft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dstufft/subscriptions","organizations_url":"https://api.github.com/users/dstufft/orgs","repos_url":"https://api.github.com/users/dstufft/repos","events_url":"https://api.github.com/users/dstufft/events{/privacy}","received_events_url":"https://api.github.com/users/dstufft/received_events","type":"User","site_admin":false},"created_at":"2015-06-01T13:29:42Z","updated_at":"2015-06-01T13:29:42Z","body":"Thinking about this, I have the following thoughts:\r\n\r\n* The 100 deployments of a single application seems a bit niche, most of the time I don't keep that many on a server, it's a handful. If I need access to more than that I'll have them archived in some sort of storage area (and I generally want the entire artifact).\r\n* It will still end up saving space, even if the above is a niche case, because there are a lot of things that people will install multiple times.\r\n* This will break things like dh-virtualenv if it's on by default, since virtualenvs will no longer be self contained.\r\n* Currently virtualenv has no way of knowing if something is supposed to be \"immutable\" or not. It's not unusual for people to live edit things in their virtualenv for debugging purposes with the goal of throwing it away once they're done.\r\n* What would it do on platforms or filesystems that don't support symlinks?\r\n* How would it handle permissions? Right now If I create a shared virtualenv I only have to worry about the permissions of that particular folder, but now I have to worry about the permissions of some wheel cache folder which is likely going to be in the creating user's home directory.\r\n* Would this happen outside of virtualenvs?"}}