Path: csiph.com!eternal-september.org!feeder.eternal-september.org!border1.nntp.ams1.giganews.com!nntp.giganews.com!newsfeed.xs4all.nl!newsfeed7.news.xs4all.nl!nzpost1.xs4all.net!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'python,': 0.02; 'subject:Python': 0.05; '(b)': 0.07; 'dependency': 0.07; 'executable': 0.07; 'cherrypy': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'restful': 0.09; 'runtime': 0.09; 'python': 0.10; 'interpreter': 0.15; 'background,': 0.16; 'learns': 0.16; 'received:80.91.229.3': 0.16; 'received:dip0.t-ipconnect.de': 0.16; 'received:plane.gmane.org': 0.16; 'received:t-ipconnect.de': 0.16; 'too?': 0.16; 'webpy': 0.16; 'copied': 0.18; 'frameworks': 0.18; 'machine': 0.21; 'java': 0.22; '(a)': 0.22; 'environments': 0.22; 'libraries': 0.22; 'installation': 0.23; 'consistent': 0.23; 'header:User-Agent:1': 0.26; 'header:X-Complaints-To:1': 0.26; 'linux': 0.26; 'skip:" 20': 0.26; 'bugs': 0.27; 'relies': 0.29; 'environment': 0.29; '(c)': 0.29; 'there.': 0.30; 'allows': 0.30; "i'm": 0.30; 'code': 0.30; 'task': 0.30; 'primary': 0.31; 'file': 0.34; 'handle': 0.34; 'skip:d 20': 0.34; 'requiring': 0.35; 'quite': 0.35; 'supports': 0.35; 'but': 0.36; 'too': 0.36; 'there': 0.36; '(and': 0.36; 'to:addr:python-list': 0.36; 'subject:?': 0.36; 'subject:: ': 0.37; 'received:org': 0.37; 'charset:us-ascii': 0.37; 'doing': 0.38; '(with': 0.38; 'virtual': 0.38; 'building': 0.38; 'application': 0.39; 'easily': 0.39; 'resources': 0.39; 'build': 0.40; 'to:addr:python.org': 0.40; 'still': 0.40; 'received:de': 0.40; 'called': 0.40; 'services,': 0.61; 'different': 0.63; 'else.': 0.66; 'packages,': 0.66; 'pleasant': 0.66; 'received:217': 0.66; 'potentially': 0.67; 'internet': 0.70; 'stated': 0.70 X-Injected-Via-Gmane: http://gmane.org/ To: python-list@python.org From: dieter Subject: Re: Packaging and deployment of standalone Python applications? Date: Tue, 15 Sep 2015 07:46:06 +0200 References: <7360db29-ba81-4b84-99eb-dbeca2a888b8@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Gmane-NNTP-Posting-Host: pd9e08c6f.dip0.t-ipconnect.de User-Agent: Gnus/5.1008 (Gnus v5.10.8) XEmacs/21.4.22 (linux) Cancel-Lock: sha1:Cnv1UKYC9DrLpGowCaVTzZo6Ytw= X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.20+ Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 35 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1442295983 news.xs4all.nl 23731 [2001:888:2000:d::a6]:46882 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:96618 Kristian Rink writes: > Folks; > > coming from a server-sided Java background, I'm recently exploring frameworks such as cherrypy or webpy for building RESTful services, which is quite a breeze and a pretty pleasant experience; however one thing so far bugs me: Using Java tooling and libraries such as DropWizard, it is pretty straightforward to build an "all-inclusive" application containing (a) all code of my own, (b) all required dependencies, (c) all other resources and, if required, even (d) a Java virtual machine in one large .zip file which can easily be copied to a clean Linux VM, unzipped and started there. > > Are there ways of doing so using Python, too? I do not think that the Python support in this regard is as sophisticated as in the Java world. Have a look at "distribute/setuptools". It supports (a) and (b) (event though you must write a "setup.py" without the help of an UI) and allows to state the dependencies (part of (c)). It can generate a so called "egg" (a distribution unit) representing one distributable component. On installation, you still need a local Python (with its runtime environment) and the installation process will try to resolve the stated dependencies - potentially requiring internet access. In order to get one executable containing the Python interpreter and all required packages, there is "freeze" (and when I remember right a solution provided by "eGenix"). However, you must manually prepare the application such that "freeze" learns about the "required packages". "freeze" is likely too old that it already would interprete the dependency declarations. You might also have a look at "zc.buildout". Its primary task is to ensure the setup of a consistent development/deployment environment across different environments (hosts). It relies on a local Python installation - but can handle almost everything else. Again - without UI support.