[Distutils] [proposal] module dependency specification and overriding for packages

Ronny Pfannschmidt opensource at ronnypfannschmidt.de
Sat Sep 10 09:23:00 EDT 2016


Hi,


On 10.09.2016 12:37, Nick Coghlan wrote:
> On 9 September 2016 at 16:46, Ronny Pfannschmidt
> <opensource at ronnypfannschmidt.de> wrote:
>> Hi,
>>
>> while trying to vendor packages that depend on six, i noticed a problematic
>> implication
>>
>> it is impossible to do this without patching those modules, as such adding a
>> fragile maintenance burden.
> It's already possible to do this without patching by writing an
> "install aliases" function that looks something like:
>
>      import sys
>      import myapp._vendor.six
>
>      def install_module_aliases():
>          sys.modules["six"] = myapp._vendor.six
that specifically breaks the very purpose the vendoring happened
which is to decouple from the global installed version

for example if we vendor six in that way in pytest,
we literally break testing anything that depends on a different version 
of six

the same goes for other libraries
> Run that early in your app startup (before you import anything else),
> and "import six" will get your vendored version from the module cache
> rather than looking for the normal one.
>
> For app level bundling, though, it's really better to find a way to
> deploy a full venv if possible, rather than vendoring things (for
> library level work, aim to avoid vendoring in general and use
> dependency version specifiers instead).
for my use-case (which is making a infrastructure package robust and 
having it reuse well tested code)
its basically the worst solution to just pin global dependencies, since 
testing code that depends on different versions will be impossible to test

its seems impossible to avoid vendoring when one wants to use 
library-specific versions of dependencies without literally poisoning 
pythonpath.

the python module system and sys.modules are the main crippling factors 
in that area,
and my understanding so far is, that python-dev will not ever remove 
that limitation.

(and its not a good idea to remove such a limitation without having 
actual working encapsulation)

-- Ronny
> Cheers,
> Nick.
>



More information about the Distutils-SIG mailing list