Python, Django, and Juniper

Back in January we wrote about the need to port the Open edX code from Python 2 to Python 3. We’re pleased to report that, thanks to help from the community, we’re making good progress. The Python test suite for our main repository now runs under both Python 2 and Python 3.

Now there’s another porting effort ahead of us. The Open edX web applications are built on the Django web framework. We currently use version 1.11 of Django, but that version is coming to its end of life soon. We need to move to Django 2.2 to continue to get Django’s maintenance support. It will be another large chunk of work.

Once we are fully on Python 3 and Django 2.2, we can start the next Open edX release, called Juniper. Although Juniper will be out a bit later than we had originally hoped, it will be built on a foundation with strong support into the future.

As with the Python 3 upgrade, we welcome help from the community to move to Django 2.2. We’re looking for many kinds of help. If you would like to get involved, please fill out this Google form.

The sooner we get the code onto Django 2.2, the sooner everyone can have Juniper. Thanks!

(btw, copied from


Following the community meeting this afternoon (Thursday, Nov 14), we discussed it internally here at EDUlib. We will follow edX’s lead whatever you decide with regards to what will be included in Juniper (Python 3 only) or moved to Koa (Django 2.2).

We do have a slight preference for Python 3 as soon as possible because we do have a potential issue with ecommerce and the modifications we needed to make to our fork in the past regarding the use of the Paysafe payment processor and their SDK. We may need to adapt it again to use Python 3 or a more recent version of their SDK.

Just our 2 cents.

1 Like

@sambapete thanks for the followup. For Python 3, our current plan is to do a “Juniper alpha” once things are running smoothly on Python 3. This would give people a point to test against, but we wouldn’t be freezing Juniper development at that point. Would that work for you?

No problem as long as “ecommerce” is included in the “Juniper alpha” release and it’s migration to Python 3 is completed.

If not, we will have to test “Juniper alpha” and check if our edx-platform and ecommerce forks can still communicate with each other even if one talks Python 3 and the other still talks an old dialect like Python 2 :wink:

As our ecommerce fork is installed as a separate component during our installation process, this could still be viable. Our preference would still be to have all standard components run under Python 3. And I do not even want to start talking about Insights…

First of all, making this big step is a very great news!

Our thought at OpenCraft is that a “Juniper alpha” release just for Python 3 would be a nice idea, it will allow us to test it and report any problems or ways to improve things as soon as possible with a tagged release.

Next Django 2.2 step looks exciting too, and will allow edX to evolve in many ways.

Latest update: we pushed the Python 3 code to edX staging two weeks ago, and found some issues which have now been resolved. The next attempt will be this week. If all goes well, we will be running on Python 3 very soon.

Once it seems like it will hold, we’ll make a “Juniper Python 3 alpha” tag for people to test.


Great News :+1: , eagerly waiting to test Juniper Alpha.

A post was split to a new topic: Help converting advanced problem to Python 3

Hello Ned etc,

Some customers I work with who use Open Ed X are doing 3-6m planning exercise, and we are trying to figure out if it’s realistic to make the move to Juniper in this timeframe.

I appreciate it’s a huge task and that great progress has been made. So this certainly isn’t a complaint! Just wondered if there was a target release date, rough idea how far through the process the team feel you are? Anything that can add some detail. or best/worst case scenarios would be a great help.

If there’s anything more up to date than you post here:
then apologies but this was latest info I could find.



We are actively working on the Django 2.2 upgrade, which at this point looks like it could be done in the middle of March. We would create the Juniper branches then, and start the stabilization work on that branch. Usually, that takes 4-6 weeks.

Thanks. So with some contingency as it’s such a big change, we are looking at around start of June?

Out of interest are there a lot of new / enhanced features (compared to previous major releases) in addition to the platform (Python, Django) changes? I see the list here:
but it’s hard for me to judge how this compares to previous ones.

Again not try ing to hold you to anything but just to understand the likely parameters we are looking at here.

Mant thanks


Thanks for the update @nedbat :raised_hands:

Hi Ned,

Per your request, I ask here.

I am doing consulting for a major company that is considering using edX as their LMS. Their other choice is Moodle, so I have been investigating the activity of the developer teams. So far, edX is winning (more active, and better prognosis), but there is a big worry about this Python 2 legacy code. Any news to report on this? It has been 16 days since last post, and we have to make a big decision soon. I would like to be able to confidently tell the others whether edX Python legacy code is close to being resolved.

Thanks in advance

Just to be clear: we have been running in production for on Python 3 since mid-December. We are currently working on updating Django from 1.11 to 2.2. That should be completed soon.

1 Like