57

I would like to create a google chrome extension. Specifically, I'd like to make a packaged app, but not a hosted app. Am I correct in thinking this limits me to JavaScript (and HTML/CSS)?

My problem is that I need to do some complex math (singular value decomposition, factor analysis) and I don't want to write algorithms for this in javascript. Python already has libraries for the functions I need (SciPy), but I can't find any indication that I can make a Chrome extension using python.

Is this correct? Do I have any other options?

1
  • 8
    SciPy is mainly a native library so cross-compilation won't help. Even if Chrome did support Python, a SciPy dependency would limit your extension's portability. Commented Feb 19, 2011 at 2:51

5 Answers 5

23

There is no Python built into Chrome but I am wondering whether pyjs can help you.

Sign up to request clarification or add additional context in comments.

1 Comment

The good pyjs project killed by known Python 2.7 != 3+ problem.
17

You can make a standard Google Chrome extension with Python (server-less) https://pythonspot.com/en/create-a-chrome-plugin-with-python/

The idea is to compile Python to Javascript (technically a JS pre-compiler) using Rapydscript. Then include the generated script in the Chrome extension. The site above has a zip file with all the stuff inside.

I recommend using Rapydscript instead of Pyjamas. A Python script compiled with Rapydscript works like any other Chrome plugin.

Pyjamas scripts does not work well with Google Chrome (needs a special parameter when Chrome starts or server).

1 Comment

Note: if you are going with Method B, it is paywalled
7

Although you mentioned you don't want it to be a hosted app, but this is one typical scenario where a hosted app can do.

SciPy is not a package that is easy to deploy. Even if you are writing a installed application based on SciPy, it requires some effort to deploy this dependency. A web application can help here where you put most of the hard-to-deploy dependencies on the server side (which is a one-off thing). And the client side can be really light.

Comments

7

You can make AJAX calls to a separate service with Python from your Google Chrome Extension. All complex logic will be moved to separate microservice. There is a video how to create Chrome extension, maybe you will find something there - https://youtu.be/l17LDVytSE8

Comments

0

This is a way to achieve this using C# MVC .NET and the Python compiler. The versions are really case specific, such as the infrastructure you are making use of.

Within a controller of choice in your Web App:

one can use :

using System.Diagnostics; ProcessStartInfo start = new ProcessStartInfo(); Console.WriteLine("Starting Python Engine..."); start.FileName = @"~\Python\Python39\python.exe";// you will need to have a copy in an accessible folder. start.Arguments = string.Format("{0}", @"~/PythonScripts/PythonScriptName.py"); start.UseShellExecute = false; start.RedirectStandardOutput = true; Console.WriteLine("Starting Process..." + DateTime.Now.ToString()); 

Results can be retrieved as for instance:

using (Process process = Process.Start(start)) { using (StreamReader reader = process.StandardOutput) { string result = reader.ReadToEnd(); Console.Write(result); } } Console.WriteLine("Process Succeeded..." + DateTime.Now.ToString()); 

The results can then be populated within a model and sent to your page on Load/Post.

You can see examples of how I make use of this to evaluate z-spreads with a web front-end using python in this manner.

enter link description here

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.