Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can we build and distribute python scripts in a windows environment

My team is enjoying using python to solve problems for our business. We write many small independent scripty applications.

However, we have to have a central windows box that runs these along with legacy applications.

Our challenge is going through a build and deploy process.

We want to have Bamboo check the script out of git, install requirements and run tests, then if all is green, just deploy to our production box.

We'd like libraries to be isolated from script to script so we don't have dependency issues.

We've tried to get virtualenvs to be portable but that seems a no go.

Pex looked promising, but it doesn't work on windows.

Ideally you'd see a folder like so:

AppOne
  /Script.py
  /Libs
    /bar.egg
    /foo.egg
AppTwo
  /Script2.py
  /Libs
    /fnord.egg
    /fleebly.py

Are we thinking about this wrong? What's the pythonic way to distribute scripts within an enterprise?

like image 754
MattK Avatar asked Feb 03 '17 14:02

MattK


People also ask

How do you distribute a Python script?

Use PyInstaller, py2exe, Nuitka, or another bundling solution. The most convenient way to deliver a Python application to a user is to provide them with an executable—either a single file or a directory with an easily identified executable somewhere in it.


1 Answers

You may be able to do that with a neat if relatively unknown feature that was sneaked into Python 2.6 without much ado: executing zip files as Python applications. It got a bit (just a bit) more of publicity after PEP 441 (which is the one PEX is inspired in), although I think most people is still unaware of it. The idea is that you create a zip file (the recommeded extension is .pyz or .pyzw for windowed applications, but that's obviously not important) with all the code and modules that you want and then you simply run it with Python. The interpreter will add the contents of the zip file to sys.path and look for a top level module named __main__ and run it. Python 3.5 even introduced the convenience module zipapp to create such packaged applications, but there is really no magic in it and you may as well create it by hand or script.

In your case, I guess Bamboo could do the check out, dependency install and tests in virtualenvs and then package the application along with the environment libraries. It's not a one-click solution but it may do the trick without additional tools.

like image 111
jdehesa Avatar answered Sep 23 '22 15:09

jdehesa