Reputation: 12418
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?
Upvotes: 56
Views: 90678
Reputation: 1
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.
Upvotes: 0
Reputation: 11760
There is no Python built into Chrome but I am wondering whether pyjs can help you.
Upvotes: 23
Reputation: 483
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
Upvotes: 7
Reputation: 2433
I'm writing an extension with Flexx PScript and like it very much. Here's an overview of different tools compared to PScript (do not trust this article, it's written by flexx developers:).
Upvotes: 2
Reputation: 295
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).
Upvotes: 17
Reputation: 17850
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.
Upvotes: 7