What are the best practices for distributing a Python application in a professional manner?

I am seeking guidance on the proper steps for deploying a desktop python application, specifically generating a trusted executable and installer.

Although I am a mechanical engineer, I have been involved in programming for several years. However, as I am not a full-stack programmer, there are some project insights that I may be missing.

I have developed a project for my company using Tkinter in VS Code. The application is functional with git versioning, unit tests, dynamic screen sizing, and a login/licensing system (with assistance from a third-party company). I even have a landing page prepared for our website.

Despite this progress, I am facing challenges. I can create an executable with pyinstaller, an installer with Inno Setup, and package it into a .msi file with MSI Wrapper. Unfortunately, I encounter trust issues and virus warnings, even though the code is clean.

This method of deployment is not suitable for a commercial application intended for mass distribution. I believe utilizing Visual Studio Enterprise, azure devops, obtaining a code signing certificate, and creating an app manifest .xml may be necessary. These are areas where I lack experience and feel lost.

I would appreciate guidance on the proper steps to deploy this application successfully with a trusted windows executable and installer under the company's name. How should I proceed?

Additional information: The application is written entirely in Python, utilizing libraries such as matplotlib, numpy, PIL, etc. The GUI is created using tkinter, along with images/icons and a .ttf font for specific text.

Answer №1

Python is definitely capable of creating professional programs for distribution, but there are certain challenges to consider if you are new to the process.

One potential issue with Python is that the source code of the application can be easily decompiled. To address this, code obfuscation techniques such as compiling with Cython, using encryption libraries like bcrypt, or utilizing remote servers for sensitive data storage can be effective measures.

It's important to thoroughly review the licenses of any third-party libraries used in your project, as some may not permit commercial use without proper licensing agreements.

Windows users may encounter trust issues due to User Account Control (UAC), which can be mitigated by digitally signing the application to establish its authenticity.

When it comes to legality, make sure to carefully review and potentially consult with a lawyer about the terms of the MSI license agreement. Additionally, distributing Microsoft Visual C++ Redistributable packages with your application raises questions about legal compliance that should be addressed.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Using Python to Automate Chromium with Selenium

I have developed a Python script that uses Selenium to gather data from various websites. It works perfectly on my Windows PC, but I'm now faced with the challenge of making it run on my Raspberry Pi. Since Chrome is not supported on the Pi, I need to ...

Excellent resource for Python documentation similar to ruby-doc.org

Although I am passionate about Python, I must admit that I find its online documentation quite lacking compared to Ruby. Ruby seems to have a plethora of well-organized documentation sites: http://api.rubyonrails.org/ (I understand this is Rails-specific ...

DJANGO - Receiving empty request.files in AJAX call

Last weekend was completely consumed by this issue, so any assistance is greatly appreciated. I am facing an issue with file upload using a form that categorizes reports. When submitting the form without ajax, everything works fine. However, when switchin ...

Obtaining only string values when looping through JSON information

JSON: { "status": "success", "data": { "9": { "1695056": { "id": "1695056", [...] }, "csevents": { "2807": { "id": "280 ...

Incorporate a website link into a text string using Python

Is it possible to assign a URL to a specific portion of a string in Python? For example: StrVar = "This is my test string" I would like to link the word "test" to a URL such as "www.stackoverflow.com" Can this be done? If ...

Having difficulty updating my npm package manager for node

When attempting to update my node package manager using the command npm install -g npm on my Windows system, I encountered an error that prevented me from updating successfully. PS C:\Users\LENOVO\Desktop\Toggle-Theme> npm install -g ...

Unable to access a static file via a static URL with django.test.client

Environment Details Python Version: 3.8.14 Django Version: '4.2.4' Purpose of the Task Ensure that the static file is properly saved Ensure that the static file can be accessed from a web browser Issue Faced The problem arises after runnin ...

Extracting data from a continually updating DataTable spanning multiple pages with a consistent URL

Currently, I have experience working with C and am in the process of learning Python as a hobby. My latest project involves scraping data from a dynamically generated table on https://www.justetf.com/it/find-etf.html?groupField=index&from=search&/i ...

Creating a weekly year pivot table in pandas

I'm a beginner with pandas and I need to create pivot tables for each week using data from a csv file that contains records spanning multiple years. I am having trouble figuring out the best way to filter the dataframe by week. Currently, I am doing ...

Updating a div element dynamically using AJAX in DJANGO

Currently in the process of developing a chat application. Using jquery $.post() to add chat messages has been successful thus far. My next step is to fetch the most recent chat message from the table and update the list on the chat page. As a beginner in ...

What is the best way to export a table element into a CSV file or data frame using Selenium/BeautifulSoup?

Here is the structure of my code: from bs4 import BeautifulSoup import requests from selenium import webdriver import time from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains from selenium.webdriver.common.keys impo ...

Is it feasible to search through dynamodb using attributes other than hash and range keys?

Currently, I am utilizing boto library for connecting to dynamodb in Python. Despite my efforts, I have not come across any comprehensive tutorials on querying dynamodb. "What I require is the ability to retrieve the data from a table where a specifi ...

Validating if the elements within a list in Selenium using Python 2.7 matches the elements on a webpage

from selenium import webdriver fp = webdriver.FirefoxProfile('') driver = webdriver.Firefox(firefox_profile=fp) driver.set_window_size(1400, 1000) driver.get('') list_of_elements = driver.find_elements_by_css_selector('img[title] ...

Guide to creating a symmetrical grid pattern using python (with sample illustration)

lst = ['40', '36', '112', 'Eric', '30', 'Bob', '15', '125', '45', 'Philippe'] d = [] things = 0 summ = 0 for val in lst: try: summ+= float(val) ...

A guide on creating an SQLite table in Python using a custom method

For my project, I need to create several sqlite tables, so I decided to write a custom class for this task. This is the approach I took: def establish_connection(database_name): table_connect = lite.connect(database_name) print "Connection establ ...

What is the best way to locate a web element in Selenium using Python when it does not have an ID

I'm having trouble selecting an element on the minehut.com webpage that doesn't have an ID. Despite trying CSS Selectors, I haven't had any success. The element I want to select is: <button _ngcontent-c17 color="Primary" mat-raised-bu ...

Fixing the clock in a chess game using Python

For my chess project, I am developing a Chess clock that follows specific time formats commonly used in the game. In one format, players are granted 5 minutes each initially, and whenever a move is made, 5 seconds are added to the clock. Another example is ...

Loop through a set of n elements

Looking to iterate and calculate all possibilities of a given formula. Struggling with nested iterations due to lack of algorithmic skills. To calculate all possibilities (0-100%) for 3 constant values {z1, z2, z3}, I have come up with: a=frange(0,1.0,0. ...

Where can I locate the Python `Table` and Mapper module?

I came across this sequence of steps Creating MySql Table from a python list and the process involves: >>> column_names = ['col1', 'col2', 'col3'] >>> columns = (Column(name, Integer) for name in column_na ...

Python image classification is yielding less accurate predictions than expected

Currently, I am delving into image classification using tensorflow. I have encountered an issue where my program sometimes produces different labels for the same test image when passing it repeatedly. This inconsistency is leading to incorrect predictions. ...