How to deploy packed python script on Windows?

Question:

This might sound like a very open ended question, but I am a python enthusiast, and pretty new to this world of development.
I have developed a python script which takes in an input and gives an output based on the algorithm I have put in place in the script. I want to use this script and package it in a way that it can be used by end users having no technical mindset and are only concerned with input they give and the output they get.

I have used Jupyter Notebook to develop this complex code and I want to know a way about how I can package or deploy this code so that the end user can use it without seeing how it works as it might be overwhelming for them.

Can anyone help me with the idea on how to do it?
Something which is Opensource would be preferred.

Asked By: Kshitij Yadav

||

Answers:

Assuming you have no GUI, I would use a batch (.bat) file to call the script with the provided inputs.

your_script.bat:

set VAR_1=this
set VAR_2=that

python your_script.py %VAR_1% %VAR_2%

Then retrieve these arguments in the python script via

sys.argv[1]  sys.argv[2]

For final users it’s just a double click!

I hope you got the idea

[EDIT: sys.argv[0] is the name of your script]

Answered By: hjuste

Use Sparrow to deliver your script to end users. It works nice with Python scripts too.

Basically you just declare your requirements as requirements.txt file and name your script as task.py, you can handle input parameters inside a script as:

  from sparrow6lib import *

    foo = config()['foo']
    bar = config()['bar']

Then you upload your script to SparrowHub:

$ nano sparrow.json
{
    "name": "my-script",
    "version": "0.1.0",
    "description" : "this is my script",
}

$ ls -1
task.py
requirements.txt
sparrow.json

$ s6 --upload

Finally end users just use you script as:

$ s6 --install my-script
$ s6 --plg-run my-script@foo=1,bar=2

PS. disclosure I am the tool author. Let me know if you need any help with packaging your script.

PS2 I’ve changed the original answer as I recently ported Sparrow to Raku

Answered By: Alexey Melezhik

PyInstaller is a powerful opensource tool for cross-platform deployment/distribution of python project.

*Note: Although I have no experience on distributing Jupyter Notebook with PyInstaller, but it seems to be plausible with this guide.

Install through pypi:

pip install pyinstaller

Distribution of code without console can be as simple as:

pyinstaller --noconsole script.py

Then you can find your .exe(Window) under dist folder of your working directory.

Answered By: imjp94

I want to round up this question by suggesting a couple of ways to deploy Python Script or Models:

  • Docker: This is one of the most popular ways of hosting scripts and deploying Machine Learning Models online. You can use Docker to containerize the code and host it as a microservice using different apps.
  • PEX: PEX is a clever tool being developed at Twitter that allows Python code to be shipped as executable zip files.
  • AWS: Using AWS, you can create a free account and get started with hosting/deployment. A lot of resources are available online.
  • PYSimple, Pyinstaller, and Sparrow: As mentioned in the answers above, we can use these packages also to do the task. Please read above.
  • Flask App: If you don’t want to use Docker, using a simple flask app, you will be able to host your script online. But there will be a lot of issues as it is not containerized. Best to use Docker.
  • py2exe: If you are looking to convert the Python file into windows executable, Click here
  • cx_Freeze: Similar to the py2exe, you can use this also

I will keep adding more content as I find them, but I think the best way to do it using Docker. Hope this helps.

Answered By: Kshitij Yadav

For the sake of completeness, dh-virtualenv by Spotify should be mentioned which enables packaging python code as a debian-package.

As a starting point, one could use this Blogpost: How We Deploy Python Code

Answered By: hamnur