[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Is there a way to "link" a python program from several files?

falk

2/16/2008 6:53:00 PM

IOW, is there a "linker" for python? I've written a program comprised of about
five .py files. I'd like to find a way to combine them into a single
executable. Obviously, I could hand-edit them into a single .py file, but
I'm looking for a way to keep them as seperate files for development but
distribute the result as a single file.

If this were C, I'd compile and link them and distribute the resulting
executable. I'm trying to do that, but for Python.

TIA,

--
-Ed Falk, falk@despams.r.us.com
http://thespamdiaries.blo...
11 Answers

Diez B. Roggisch

2/16/2008 7:16:00 PM

0

Edward A. Falk schrieb:
> IOW, is there a "linker" for python? I've written a program comprised of about
> five .py files. I'd like to find a way to combine them into a single
> executable. Obviously, I could hand-edit them into a single .py file, but
> I'm looking for a way to keep them as seperate files for development but
> distribute the result as a single file.
>
> If this were C, I'd compile and link them and distribute the resulting
> executable. I'm trying to do that, but for Python.

Depending on the OS, there are several options. Ranging from
distributing an .egg (setuptools) over py2exe for windows to py2app on
OSX - and some more, e.g. cx_freeze.

Google for one of the above.

Diez

Brian Smith

2/16/2008 9:47:00 PM

0

Diez B. Roggisch wrote:
> Edward A. Falk schrieb:
> > IOW, is there a "linker" for python? I've written a
> > program comprised of about five .py files. I'd like to
> > find a way to combine them into a single executable.
> > Obviously, I could hand-edit them into a single
> > .py file, but I'm looking for a way to keep them as
> > seperate files for development but distribute the
> > result as a single file.

> Depending on the OS, there are several options. Ranging from
> distributing an .egg (setuptools) over py2exe for windows to
> py2app on OSX - and some more, e.g. cx_freeze.

I would be interested in a program that can combine multiple modules
into a single module, which removes all the inter-package imports and
fixes other inter-module references, like Haskell All-in-One does for
Haskell: http://www.cs.utah.edu/~hal/HAllInOne/...

- Brian

Diez B. Roggisch

2/16/2008 11:12:00 PM

0

Brian Smith schrieb:
> Diez B. Roggisch wrote:
>> Edward A. Falk schrieb:
>>> IOW, is there a "linker" for python? I've written a
>>> program comprised of about five .py files. I'd like to
>>> find a way to combine them into a single executable.
>>> Obviously, I could hand-edit them into a single
>>> .py file, but I'm looking for a way to keep them as
>>> seperate files for development but distribute the
>>> result as a single file.
>
>> Depending on the OS, there are several options. Ranging from
>> distributing an .egg (setuptools) over py2exe for windows to
>> py2app on OSX - and some more, e.g. cx_freeze.
>
> I would be interested in a program that can combine multiple modules
> into a single module, which removes all the inter-package imports and
> fixes other inter-module references, like Haskell All-in-One does for
> Haskell: http://www.cs.utah.edu/~hal/HAllInOne/...

won't happen for python. python relies heavily on modules/packages being
namespaces.

Why would you want such a beast anyway? If it's about
single-file-distribution, that is solved by some of the above mentioned
tools - or even not desired anyway (say OS X bundles)

Diez

Brian Smith

2/16/2008 11:40:00 PM

0

Diez B. Roggisch wrote:
> Brian Smith wrote:
> > I would be interested in a program that can combine
> > multiple modules into a single module, which removes
> > all the inter-package imports and fixes other
> > inter-module references, like Haskell
> > All-in-One does for Haskell:
> > http://www.cs.utah.edu/~hal/HAllInOne/...
>
> won't happen for python. python relies heavily on
> modules/packages being namespaces.

So does Haskell. Haskell All-In-One handles that by renaming every
top-level artifact.

> Why would you want such a beast anyway? If it's about
> single-file-distribution, that is solved by some of the above
> mentioned tools - or even not desired anyway (say OS X bundles)

I want to package a complex WSGI application into a single CGI script,
so that users can copy the script into some CGI-enabled directory and
have it work without any further configuration, and so that it runs
faster (especially when the file is on NFS). If it is possible to run an
egg as a CGI (without modifying the web server configuration file), then
that would work as well.

- Brian

Paul Rubin

2/16/2008 11:54:00 PM

0

"Brian Smith" <brian@briansmith.org> writes:
> So does Haskell. Haskell All-In-One handles that by renaming every
> top-level artifact.

That can't be done reliably in python because namespaces are dynamic.

> If it is possible to run an egg as a CGI (without modifying the web
> server configuration file), then that would work as well.

This would be an interesting enhancement.

BlueBird

2/18/2008 9:16:00 AM

0

On Feb 16, 7:53 pm, f...@green.rahul.net (Edward A. Falk) wrote:
> IOW, is there a "linker" for python? I've written a program comprised of about
> five .py files. I'd like to find a way to combine them into a single
> executable.

I wrote a small wiki page to sum-up my findings about such typical
problem:

http://www.freehackers.org/Packaging_a_pyth...

falk

2/21/2008 6:59:00 AM

0

In article <0f3e4884-59f8-4db8-a2a3-6f6d4fc14275@u72g2000hsf.googlegroups.com>,
BlueBird <phil@freehackers.org> wrote:
>
>I wrote a small wiki page to sum-up my findings about such typical
>problem:
>
>http://www.freehackers.org/Packaging_a_pyth...
>

Excellent references, but maybe a bit of overkill. Everybody in my
target audience has python on their systems, I just want to send a
single .py (or .pyc) file so there's no complicated install procedure.

I mean, how *are* large python programs normally distributed under Linux?

--
-Ed Falk, falk@despams.r.us.com
http://thespamdiaries.blo...

George Sakkis

2/21/2008 8:08:00 AM

0

On Feb 21, 1:58 am, f...@green.rahul.net (Edward A. Falk) wrote:
> In article <0f3e4884-59f8-4db8-a2a3-6f6d4fc14...@u72g2000hsf.googlegroups.com>,
>
> BlueBird <p...@freehackers.org> wrote:
>
> >I wrote a small wiki page to sum-up my findings about such typical
> >problem:
>
> >http://www.freehackers.org/Packaging_a_pyth...
>
> Excellent references, but maybe a bit of overkill. Everybody in my
> target audience has python on their systems, I just want to send a
> single .py (or .pyc) file so there's no complicated install procedure.

What's so complicated about "python setup.py install" ? Even that is
not strictly necessary for pure python packages; a user may just
unpack the archive, cd to the extracted directory and execute the
appropriate .py file(s).

George

Diez B. Roggisch

2/21/2008 8:53:00 AM

0

Edward A. Falk schrieb:
> In article <0f3e4884-59f8-4db8-a2a3-6f6d4fc14275@u72g2000hsf.googlegroups.com>,
> BlueBird <phil@freehackers.org> wrote:
>> I wrote a small wiki page to sum-up my findings about such typical
>> problem:
>>
>> http://www.freehackers.org/Packaging_a_pyth...
>>
>
> Excellent references, but maybe a bit of overkill. Everybody in my
> target audience has python on their systems, I just want to send a
> single .py (or .pyc) file so there's no complicated install procedure.
>
> I mean, how *are* large python programs normally distributed under Linux?

By means of their package management. At least that's what many people
prefer.

But I don't get what's wrong with


you: python setup.py bdist_egg

your client: easy_install the.egg



Diez

falk

3/4/2008 7:07:00 AM

0

In article <92dc6954-6f9a-40b2-9cee-4bd46b9a2826@f47g2000hsd.googlegroups.com>,
George Sakkis <george.sakkis@gmail.com> wrote:
>
>What's so complicated about "python setup.py install" ? Even that is
>not strictly necessary for pure python packages; a user may just
>unpack the archive, cd to the extracted directory and execute the
>appropriate .py file(s).

Aha. Completely forgot about setup.py.

Unfortunately, under Linux, all it seems to do is build a tarball for
me, which when unpacked produces several discrete .py files, leaving
me back where I started.

Anyway, I did what I should have done in the first place and trolled
/usr/bin to see how other people had done it.

It turns out there are a few answers: First, you can simply just produce
the program as a single .py file (which is what I wound up doing).

Second, you can put all the .py files other than the "main" one into
/usr/share/<programname> and then append that directory to your
path before importing anything.

Third, you can put all the .py files other than the "main" one into
/usr/lib/python2.2/site-packages/<programname> and then you don't
have to modify your path.


The second and third methods have the advantage that you can have .pyc
files hanging around.


Anyway, thanks for all your input.

--
-Ed Falk, falk@despams.r.us.com
http://thespamdiaries.blo...