In-depth Review: Should You Host Python Website On PythonAnywhere?

By Ankur Tiwari | Updated on 27-08-2020

In-depth Review: Should You Host Python Website On PythonAnywhere?

Medium Reader? You can read this article on medium. Don't forget to clap!

I am not a professional product reviewer. However I am getting into this uncharted terrain and reviewing PythonAnywhere (PA).

Back in 2016, I was doing a bit of Embedded C and PHP, when internet’s high decibel machine learning rush hit me. Realizing the limits of my skills, I pivoted to Python. One thing led to another and I decided to follow Lean Development Methodology to quickly launch a website and then improve it gradually. Flask was selected and I started with Flask Mega Tutorial.

Next came the search for Python web hosting service. After a few days of research, I couldn’t really made up my mind. But since I really wanted to get started, I chose a nd signed up for PythonAnywhere.

Even after significant research about Python website hosting service, I could not understand various moving parts clearly. I selected Pythonanywhere based on a hunch.

PythonAnywhere is a web hosting company which offers hosting solution for Python web applications. One can use it to host Python web apps and scripts. It’s a 7 years old company based in London.

I’m reviewing PythonAnywhere for following reasons:

  1. I’ve been its user for three years.
  2. When I started developing Python Flask web apps, I had to spend many days searching “Hosting services for Python website”. When a service is finally decided, I went in with a leap-of-faith, in-spite of all the research.
  3. There are many people who keep asking in forums “where should I host my Python website and Python applications”.
  4. A wrong decision in hosting a Python app can cost dearly in time, performance, project growth and energy.
  5. Internet’s signal/noise ratio is going down everyday. If I can help put even one thing in perspective, it will be a success.

The goal here is to simplify and present enough information so that you can take a well-informed decision, instead of relying on hunch or PR articles.

So if you are wondering “is PythonAnywhere good?” or “should I use PythonAnywhere for web hosting?”, sit tight, we are about to discover the truth.

What you can do on PythonAnywhere?

  1. Code, run and host python scripts.
  2. Build & host Django web app.
  3. Build & host Flask web app.
  4. Build & host web2py web app
  5. Build & host Bottle web app

These are the core offerings of PythonAnywhere. “Code, Run and Host” are the words they focus on. This word-set means that you can open PythonAnywhere.com on any web browser to:

  • Write code for Python applications in a web-based editor [or in a console],
  • Save and run the code, validate its output,
  • Host the code on PythonAnywhere.

What are PythonAnywhere’s big promises?

  1. Start hosting quickly
  2. Develop anywhere.
  3. Amazing support

In this review, we will see how PythonAnywhere fares on these promises among many other things.


This is a product review by a user. The way I'm going to do this is to break the product experience into multiple smaller parts and examine each one independently.

  1. Getting Started: How easily can you experience product's value?
  2. User Interface: Can you use core functions of the product without needing to visit the "how-to" pages and YouTube?
  3. Platform & Tech: Does the product support your requirements with least friction?
  4. Performance: Is it reliable to host Python website on PythonAnywhere?
  5. Support: Do your tickets get resolved or all you receive are scripted replies?
  6. Knowledge Base & Community: Can you get help, ideas and inspiration instantly?
  7. Pricing: Low or high, are you getting value for money?
  8. Is it built for you?

Getting Started

When you google “how to do something”, you are looking for the exact information to complete a task and move ahead.

When you want to select a web app hosting provider, you are looking for the information to help you make best decision. Once a decision has been made, you want to complete the signup process and validate your decision quickly.

Hence, You want to move from a stage of confusion to a stage of achievement. Fast.

User's journey to value discovery:

  1. Confusion: How can I solve my problem?
  2. Search: What are my options?
  3. Decision: Ok! this one.
  4. Action: Signed up.
  5. Anticipation: Is it what I thought it to be?
  6. Achievement: Oh Wow!

All you want is to quickly and reliably move from step 1 to 6.

PythonAnywhere does a great job in helping its users in this journey. It takes them from a stage of confusion to a stage of achievement in just 9 clicks, within a few minutes. Yes, 9 clicks to have your working Python website shinning on internet!

You can get a live website on PythonAnywhere in just 9 clicks
Signup and launch your first Flask web app, all in just 9 clicks

Alright, so it is a simple “Hello World” website. No fancy stuff. But now you have a fully functional website accessible from any corner of internet.

I once used a very popular hosting service to host a simple Flask web app. It took me four days to reach this stage. Had to read multiple documents and configure many settings. As if this was not enough, it got so confusing at a point that I had to delete everything twice. It worked in third attempt. Mental fatigue and loss of tempo were extra costs.

What PythonAnywhere does is to give you a fully configured Python environment. So, if you are building a Flask web application, all you need is to make a few mouse clicks and voila! Flask environment is ready; start writing your code.

PythonAnywhere web hosting for Django, Flask, web2py and Bottle, all follow this simple approach to build your first live web app in minutes.

There is nothing more assuring than seeing a functioning website just in a minute or two.

PythonAnywhere delivers on its promise of "Start Hosting Quickly".
Rating: A+

User Interface

I thought nothing of PythonAnywhere’s user interface at the beginning. It did not attracted my attention. I simply went about building and hosting my Flask web app. However a few months into using the service, I realized that I never had to google “how to do this on PythonAnywhere” related to user interface.

Every flow and control that I needed to run my Flask website was their in front of me, in its simplest form.

I further understood the importance of ‘simple and minimal’ UI when I tested another hosting provider for a new website. I had won a coupon and wanted to redeem it. The efforts required to understand how to use the service was overwhelming. Buttons, drop-downs and links everywhere. Hours spent wondering where to click and where to go in each step. After a lot of time & efforts, my Python Flask website was launched finally. However I could not stay with this service for long and came back to PA.

Almost everything you will ever need to reliably host your Python website on PythonAnywhere is available on just a few pages. There is no control panel. You will find all the required links on the top right side of the dashboard page.

PythonAnywhere is a minimalist UI, it is easy to find anything you need
All the controls are available with these few links on the top right corner

That said, the user interface of PythonAnywhere is not something you will feel excited about. Its plain and basic, not something that will ‘wow’ you. Mostly, it will get unnoticed. But like the user interface of some of its competitors, PythonAnywhere’s UI does not confuse you and it is not an attention seeker.

If you want to build a new webapp, there is a big button to get started.

If you want to upload a new file, there is an upload button, placed right in front of your eyes.

If you have made changes in your code and want to reload the server, there is a button for it, displayed very prominently.

If you want to create a database or launch a console there are well-positioned links for each, prominent enough not to be missed even by a cursory glance, not hidden deep inside multi-stage drop-downs which only the champions of treasure hunt can find.

Overall you get a few thoughtfully selected controls which are all you need to host your Python website to success.

Simple and minimal interface which does not come in way of successfully hosting a Python website.
Rating: B

Enter your email below for in-depth organic SaaS growth strategies every week in your inbox

Platform & Tech

At this point, you already know that a fully configured python environment gets created for every new Python web application within minutes on PythonAnywhere. Hence there is no need to install python, flask or any other web framework.

However to build a meaningful web application you will need to use few more Python modules. For example, for a Flask app, you might need to use libraries to create a user system (login, logout), manage forms, easily use database, integrate payment system, build mailing system, protect the app against attacks and so on.

The use of these libraries depends on the design of your web app. No selection fits all. Hence it is wise not to pre-install them in the environment. Rather, give users an easy way to install whichever package they think is applicable for their website. This is exactly what PythonAnywhere does. However PythonAnywhere has also included some of the most widely used libraries in their default environment. You can find the list of these libraries here.

“Ok cool, but how to install modules on PythonAnywhere?”

PythonAnywhere allows its users to install any number of Python modules they consider fit for their web application using “pip install” command in bash console. This whole system is kind of Lego blocks system. Select and add whichever block is good for your application with a single line of command.

This way you can create a light weight and useful stack of libraries which supports everything that your website needs.

Just like Lego blocks, select and pip install packages required for your web application
Pip install any package you need and improve your environment block by block

As I started improving my websites, I enrolled into the Build A SaaS App With Flask course. For all improvements, I just kept installing required Python modules on my PythonAnywhere environment. It always worked.

A word of caution, there is a limit to what packages PythonAnywhere supports. For example, Celery, a task queue implementation for Python web applications is not supported. There are few other packages which are not supported. However I have found PythonAnywhere team resourceful enough to suggest an alternative package if your application needs something which is not yet supported by them.

On the plus side, PythonAnywhere as a product is in continuous improvement mode. This means what is not possible today, might be possible tomorrow. For example, Elasticsearch, a popular open-source full-text search engine, which was previously not supported at PythonAnywhere, is currently in private beta and might be available soon.

In case there is a Python module which is critical for the success of your application, the best way to move forward is to ask the PythonAnywhere support team about it over an email.

Now, to build a website you need technologies for front-tend, database and back-end. Combination of all such technologies is called ‘full stack’. You can easily build a full stack application on PythonAnywhere:

  1. Back-end: Python Web Framework (Django, Flask etc)
  2. Database: MySql or Postgress
  3. Front-end: HTML, CSS, Javascript (or any JS library)

All together in one platform and ready to-be used. Thus you can build a static website, web app, chat bot, an API, blog or almost anything you want without the need of any extra service.

On PythonAnywhere’s homepage the first thing you read is “Host, run, and code Python in the cloud!”. Let’s examine this “cloud hosting” part.

The traditional way to Python programming is to create a development environment in a local computer. Many Python IDEs are available for this purpose. However the code remains in the local machine. Not a problem until:

  1. Your machine crashes
  2. You need to access the code from another machine
  3. You completed the project and attempted to deploy it on a live web server only to find that settings required to run a code in local machine are different than the ones to run it on the live server. Another day or two needed on this now.

With PythonAnywhere, you get a Python environment and a space to save all codes on cloud. This means:

  1. You can get access to the code from anywhere by simply login to your PythonAnywhere hosting account. You do not just get the cloud space but more importantly the ability to run and execute Python codes within the environment you have built, from any machine, any location. So you can continue the development independent of machine or location.
  2. You are building on a real environment from day one. So the moment you would like to launch the website for the world, there will be no extra work, configuration or surprises.

Having used PythonAnywhere for quite a while now, I have really benefited from its cloud hosting features. This is not to say that it is a unique system. You can of course create a similar system using a few independent services, but having everything done-for-you within a nice package is a great luxury.

In case you need to share the code with a team member, you can quickly do it by generating a share link.

Click on share button in text editor to generate a share link
Click on share button in text editor to generate a share link

It is quite easy to upload files or update code. Here are a few simple ways:

  • Open the file to be updated, update the code in it and click Save, or
  • Directly upload the updated file in the directory, or
  • Upload a zip file in case of multiple files and then unzip it from bash console.

PythonAnywhere offers the option to use version control systems for your code. This means that you can use GitHub or Bitbucket to push the code and then pull it to your PA account. Though it is not a unique feature but its helpful to know the version control systems can be used with PythonAnywhere.

PythonAnywhere also offers SFTP and Rsync options, but I have never used them. However you can read about all these methods here.

HTTPS is no longer a luxury but a necessity. No one trusts HTTP websites anymore. It’s been more than 18 months since Google Chrome started to flag all HTTP sites as not secure.

Now, the usual way to enable HTTPS on a website is to buy a SSL certificate for it. You can find a lot of companies selling SSL certificates. This is not a one time buy but a recurring cost on your business. However the great folks at Let’s Encrypt are on a mission to offer these certificates for free! You can get a certificate with 90 days validity, after which you can renew it.

PythonAnywhere has integrated Let’s Encrypt SSL certificate within its service. Initially it required manual work at the user’s end to set up this certificate along with a scheduled task to renew it every 30 days. However PythonAnywhere has now eaten away all the complexities and provides a simple toggle button to enable the HTTPS for the websites it hosts.

One click HTTPS support courtesy Let's Encrypt
One click HTTPS support courtesy Let's Encrypt

Now you can enable HTTPS for your Python website hosted on PythonAnywhere with just one click and that too for free!!

Alright, you have built a fully functional website and is now ready to launch. However there is something more you have to do…that is deciding key tasks which needs to performed either periodically or continuously.

What are these tasks? Here are a few examples:

  1. Automatically send your team a daily report of new user registration, day's sales, new leads etc.
  2. Send abandon cart emails to users.
  3. Take daily backup of database and save it in a separate cloud storage.
  4. Send birthday or anniversary emails to your users.

And so on.

PythonAnywhere provides a simple interface to schedule periodic as well as continuous running tasks.

Schedule periodically running tasks on PythonAnywhere
Schedule periodically running tasks on PythonAnywhere
Schedule continuous running tasks on PythonAnywhere
Schedule continuous running tasks on PythonAnywhere

When I was learning and building my first Python Flask web app, I used to go through tutorials and Stack Overflow a lot. In case you too are doing this, you might come across terms like nginx, uwsgi and gunicorn. Nginx is a web server while uwsgi is a deployment type. Details of these are outside the scope of this review. However, you should know that PythonAnywhere uses uWSGI with Nginx to run all web apps hosted with it.

A good place to save environment variable is the wsgi configuration file available under the Web tab.

What is the downside? PythonAnywhere is not a Virtual Private Server (VPS) offering. What if your application need full server control or it is tricky enough to need something more than Python programming language, like Php or Ruby in backend? Personally I have no experience in building such systems. Great many web businesses are built solely on one technology and Python is an extremely scalable programming language. But if your business really need control of server, then PA is not something for you. You need a full-blown VPS.

The question you need to answer here is, “will my business really benefit from investing time, energy and resources to gain full server control?”. If the answer is a ‘No’, then PythonAnywhere will make your life extremely easy.

However if the answer is a “Yes”, PythonAnywhere is not for you. VPS is something you would like go ahead with. In this case, first make sure that either you or a team member is an expert in romancing with the server.

PythonAnywhere delivers on its promise of "Develop Anywhere".
Rating: A

Performance

My website is up 100% of the time, except for around 15–20 minutes a month of scheduled maintenance duration. In these three years, I surprisingly never had an issue with uptime otherwise. I am using PA for an ecommerce store, SaaS apps, blogs and a few funnels.

PythonAnywhere periodically carries out around 15–20 minutes of maintenance, around once a month. During this period, all hosted websites remain inaccessible. It is not a big pain in return of otherwise smooth performance. But ‘down for scheduled maintenance’ is an old web issue. With continuous deployment, we no longer see websites down for maintenance. Though I am no expert in such systems, I still think PA team can find ways to do away with these down times.

In a Reddit discussion, a user shared his not-so-satisfactory experience running high CPU usage scripts. An experience which PythonAnywhere founder validated in a comment within the same thread. My guess is these were probably extremely high data crunching scripts, something which PythonAnywhere is not really built for as mentioned by its founder there.

An interesting thing to note is that this user did not advocate any other hosting service. He shifted to running his own servers, which is not something everyone can afford or has technical expertise to do. Also keep in mind that this is more than a four years old post, which means PythonAnywhere as a product has since improved a lot. But the fact is, I’m in no position to comment anything on the current performance of PA while running such high CPU usage scripts.

PythonAnywhere is hosted on AWS and built for scale. They have built a Python specific, easy to use system on top of AWS.

"So if they are built on AWS, then why should I not use AWS too?"

You can:

  • If you have technical expertise to do so, and
  • Your business benefits from this added complexity.

You get to see a basic traffic metrics in your PythonAnywhere dashboard.

PythonAnywhere dashboard shows basic traffic metrics for your website
PythonAnywhere dashboard shows basic traffic metrics for your website

"PythonAnywhere is very well optimized for its targeted application, which is Python websites."
Rating: A

Customer Support

I have sent over 100 emails to PythonAnywhere in last 3 years, a lot of them asking technical questions. Almost all of them get replied to within a day by support team. There are no support tickets, no automated replies and no delays. Just useful product communication between two people. I suspect that they take around a day to reply mainly due to difference in my and their time zones. Few mails that I had sent within their working hours even got replied to in few hours. Not system generated replies, but hand-typed replies by real humans!

Overall support team at PythonAnywhere is a rockstar!

You also get timely emails and tweets for scheduled down times for maintenance.

PythonAnywhere sends emails and tweets for downtime notifications
PythonAnywhere sends emails and tweets for downtime notifications

PythonAnywhere delivers on its promise of "Amazing Support".
Rating: A+

Help Pages & Community

The simple interface which help users to peacefully build their Python web app and is considered as advantage of PythonAnywhere, makes the help pages dull and non-navigable. These pages are directly from the pre-CSS 1998 era.

This is not to say that the content in help pages is not helpful. In fact content is to the point, fairly useful and rank in google search. But I would like to see more lively, less intimidating and easily searchable help pages.

Forums are the PythonAnywhere’s most legit community. PA team promptly answers all questions on their forums. This has resulted in a very useful resource. These pages are linked to Github and you may find some user generated content too. But PA still lacks high engagement vibes in its forums.

"Good content, dull design, not well engaged community".
Rating: B

Update [11-Aug-2020]: I have noticed that since the publication of this review, folks at Pythonanywhere have improved the UI of their blog pages.

Plans & Pricing

By now you know that you can host a Python website on PythonAnywhere, access and run code from anywhere and get amazing support. What you do not know yet is that you can do it all for FREE.

Yes. PythonAnywhere offer free Python hosting. You can host Python website for free. Here is what you get under free plan:

  • A free domain: yoursubdomain.pythonanywhere.com [sub-domain]
  • Web workers: 1
  • CPU Seconds: 100
  • Consoles: 2
  • Scheduled Tasks: 1
  • Always on tasks: 0
  • File Storage: 500 MB of disk space

All parameters are self-explanatory except Web Workers and CPU Seconds.

"A web worker is a worker process which serves responses to incoming requests. All the incoming requests are put into a queue and the worker processes operate by checking the queue, pulling off the request at the start, processing it, returning the response, then going back to checking the queue. Any requests that come in when all workers are busy are put into a queue. So if your code takes 0.2 seconds to handle each request, then a worker can handle 5 requests per second; that means with two workers you can handle ten requests a second. If your code is faster and can handle a request in 0.1 seconds, then each worker can handle ten requests/second, a total of 20 requests/second across both workers, and so on” said PA team in response to a few of my emails.

In short, a web worker is a process which serves the incoming requests. A visitor to your website makes a request when she type in a URL in a browser, click on a link, submit a form and so on. Faster these request gets served, faster will be your website’s speed. However website speed is a combination of code quality and web worker both. Increasing web workers will help if all web workers are working in their full capacity but still a lot of requests are in queue. If there are no pending requests in the queue still your website is taking too long to respond to the current requests than there could be the performance issue with you code.

A help page on PythonAnywhere describes CPU seconds:

"With every PythonAnywhere account, you get a number of CPU-seconds included each day. This applies to all code run through our in-browser consoles, and in your scheduled tasks. It does not currently apply to your web apps. A CPU-second is one second of full-power usage on a server-grade CPU. Your code only uses up CPU seconds while it’s actually busy. If your code isn’t using any CPU power (maybe it’s not running, or it’s waiting for input or for a web request to return) then it’s not using any CPU seconds. If you use up all of your included CPU seconds, don’t worry! You can always buy more — and even if you don’t, your processes will still run, in the tarpit. Tarpitted processes run at a lower priority than users who haven’t hit their limit yet, but they get any spare capacity that we have on our server cluster, unless they’re using gigabytes of RAM.”

This means CPU seconds do not affect the way web apps are run.

This means that you can:

  • Host Django website for free
  • Host Flask website for free
  • Host website or web app built on any Python framework for free

and have pretty darn good performance too.

Other than free Python hosting, there are useful paid plans available too.

PythonAnywhere’s paid plans start at $5/month. At this price you get to have your own custom domain i.e. yourdomain.com. Considering the benefits they offer, this is pretty cheap for Python website hosting. For small web applications python developers will find free or starter plan enough to begin with.

The plans are quite scale-able. As your needs grow, you can customize each of the parameters. This means that once you have hosted a website with PythonAnywhere, you do not have to worry about the hosting when the website traffic grows. Their custom plan ensures that all the requirements are served.

PythonAnywhere has paid plans starting at $5. Custom plans are good for variety of requirements.
PythonAnywhere has paid plans starting at $5. Custom plans are good for variety of requirements.

“PythonAnywhere has an attractive free plan as well as custom paid plans for all kinds of requirements. As you scale, you can simply change the required settings”
Rating: A

Growth & Marketing

PA team has built a great product and has a huge customer base. They seems to be a very small team (probably less than 10 people) and have achieved great feat. This observation becomes very clear when you compare their team size with some of their competitors. Most of PA’s competitors has team size running in hundreds.

It seems to me that ‘building great product’, ‘being attentive to customers’ needs’, ‘profitability’ and ‘eating all complexities to provide users a simple solution’ are key attributes to their DNA.

Much of their growth is organic. They get talked about in tech communities, books and forums. Happy users tweet about them all the time.

PythonAnywhere is hosted on AWS. In compliance with GDPR, they have built an EU-hosted system. A simple traffic analysis shows that PythonAnywhere is preferred for Python web hosting in USA, India, Brazil, UK and EU.

Traffic by countries-PythonAnywhere
Traffic by countries-PythonAnywhere

I have not come across any of their ads, either on Google or any social network. Neither could I find events or conference organised by them. However they are ranking pretty good for keywords and have done reasonably well in SEO. I suspect that this is a by-product of building good content and not a part of growth strategy.

PythonAnywhere is ranking good on organic keywords
PythonAnywhere is ranking good on organic keywords

For a product like this, which delights high percentage of users, a more aggressive focus on building community and engagement can lead to better growth.

When compared to their nearest competitors, it is very hard to find any kind of marketing activities. Which in a way is the testimony of high product quality. Product led growth is good but at some point of time, a company needs to push on the gas.

With that said, it is also very difficult to understand the insights behind these non-existent growth activities from outside. Maybe an all-techie team does not want to get into high decibel marketing or maybe they would like to remain hugely profitable with small team, without outside funding and do not want to spend money like VC funded companies. Difficult to say.

Also, this is not a review of their growth strategies, so I will not go into the details like I have done it for Zoom’s Growth Strategies.

"PythonAnywhere has had great growth but can be more pro-active in their engagement with the community."
Rating: C

Is It Built For You?

PythonAnywhere is a good hosting service for Python websites. You should select PythonAnywhere for to host your websites if you are:

  1. A startup developing its apps using Python programming language
  2. A team of web developers or data systems within a company and want to run apps for specific purposes
  3. An independent developer and wants to run a Python scripts or websites
  4. A growth team within a company who is looking at building tools for growth, capture data and run experiments for growth
  5. A Python teacher and want to user PA with students
  6. Someone learning Python primarily for web development

Conclusion

I am using PythonAnywhere for hosting multiple websites and have no intentions to shift to any other service. My personal highly satisfactory experience with their service can possibly make my opinion biased. Though I have tried my best for a balanced review, I might have got carried away by some of their awesomeness.

But the ease of use of the product, super prompt support and a product which just works, can not be talked highly enough. If you were searching “Why to use PythonAnywhere”, you must have got your answer by now. As far as ‘ease of use’ is concerned, PythonAnywhere is one of the best web hosting services for Python web applications.

If this review has provoked questions, inspired ideas or you have used PythonAnywhere and have your own thoughts to add, feel free to share in the comments.

You can signup for PythonAnywhere here.


If you have liked this article, please retweet it so that others can discover it!



ankur tiwari photo

Growth challenges? Schedule a call to see how I can help you acquire and retain more customers.


SaaS Growth Consultant

Hi, I'm Ankur

I'm a SaaS growth consultant. I help SaaS businesses grow using organic growth strategies.

If you want to see how I can help you grow your SaaS business, schedule a free strategy call with me.

Schedule A Free Call

Connect with me on social.

Organic SaaS Growth Newsletter

Enter your email for high quality, actionable growth strategies delivered right at your inbox.