[Bf-committers] GSoC 2017: Cycles features & Package management

Andreas Klostermann andreasklostermann at gmail.com
Wed Mar 22 14:41:19 CET 2017


Regarding a package manager: I think one of the key features should be a
way to handle dependencies between addons.

One example would be the asyncio functionality. Yes, asyncio is already in
the standard library, but the loop implementation is not. If there are
multiple addons using asyncio it would be a good idea to have them depend
on a common asyncio loop. Currently that would mean putting the loop
implementation into the main distribution and enabling it by default. Or
putting code into both addons and then try to check if one is already
running.

Another example would be a library with useful functions for addons, for
example my blender-vraag library, which isn't all that useful currently,
but there could eventually be multiple addons depending on it. They
shouldn't have to bring their own copy or even try to load two different
versions of the same code.

A solution for some addons to use binary extensions would be great, too.
But this is, of course, terribly complicated because of multiple platforms.
A first step may be to enable cython compiled extensions, because they
don't necessarily require linking to outside libraries, and are easiest to
write.

In general, I recommend looking into the setup tools and packaging
solutions in the general Python community. It used to be terrible, but now
we believe we have sort of figured it out. PyPI serves binary WHEEL
packages for all the major platforms and some minor platforms. Microsoft
has released a free compiler for Python extensions. The Conda package
manager has also been a big step forward, but it would come with much too
high overhead and architectural changes.

My proposal regarding the relation between packages and addons: A package
may include zero, one or more addons. That way a package could contain an
external library in a version that works well in blender (zero addons), a
conventional addon (one addon), or a bigger set of add-ons which belong
together but can be activated separately. In any case, a package would
place some (hopefully very light) code to be run at every blender startup,
like it is now with most addons.

I'd also like to volunteer to put some effort into an asyncio integration.
There are a couple of ways to install an event loop into Blender, and some
extra functionality to expose blender's event handling would also be nice.


More information about the Bf-committers mailing list