Packaging a private project

Thomas Heller theller at ctypes.org
Tue Dec 17 22:24:09 CET 2013


Am 16.12.2013 12:18, schrieb Nicholas Cole:
> Dear List,
>
> What is the best way to distribute a private, pure python, Python 3
> project that needs several modules (some available on pypi but some
> private and used by several separate projects) in order to run?
>
> I'd like to include everything that my project needs to run in a
> single package.  The best way to do this seems to be to be to create
> symlinks to the source code of the "3rd party" modules I need and
> create a setup.py file that includes them in its "packages" list.  Is
> this what other people do?
>
> But even more ideally, I'd like to package my script and its
> dependencies in a single zip file that can be executed by python
> directly.  I see several declarations that this is possible online,
> but I can't find a simple recipe for converting a script and its
> dependencies into this kind of distribution. Could someone give me a
> pointer to a description of "the right way to do it".
>
> I'm making life harder for myself by using python 3 (PyInstaller still
> only supports Python 2) and by the fact that I can't release some of
> the necessary code publicly.  Releasing modules and scripts on pypi
> has become very easy -- I'd forgotten how hard packaging private code
> is!

Well, pyzzer comes to mind (you find it on pypi).  It creates an
executable zip-archive containing all the stuff that you need (at least
the pure python modules).

The problem remains: how to find all the modules and packages that need
to be included?

Python's modulefinder can do this for you.  If you want to live on the
cutting edge you could try the new one that I've written for Python3.
It currently lives in

http://code.google.com/p/ctypes-stuff/source/browse/trunk/mf/py2exe/mf3.py

It has several advantages against the standard library's modulefinder;
for example it finds and is able to extract the bytecode even from
zipped eggs.
For examples how it can be used, you could peek into the runtime.py
module in the same directory, method build_library of class Runtime.

I guess for an experienced developer it takes around one day to take
these pieces and build a script that scans a python script, finds all
the needed modules and packages, and uses pyzzer to build an executable
archive from it.

Thomas



More information about the Python-list mailing list