[Tutor] how do i use p2exe

Kent Johnson kent37 at tds.net
Sun Nov 14 12:58:25 CET 2004

Ah. py2exe doesn't actually create a single-file executable. You need 
everything else in the dist folder to go with the .exe.

If you want a single file exe, Google for 'py2exe single file' to find 
some discussions.

If you want the exe on your desktop, just make a shortcut.

A more general tip - when a console-based program is failing, if you run 
it by double-clicking the exe you will often see just the flash of the 
console opening and closing. You can get more information by opening a 
console yourself to the directory and running the exe from the command line.

With weekday1.exe, if I copy it to a new directory and run it from the 
command line I get this:
Traceback (most recent call last):
   File "C:\Python23\lib\site-packages\py2exe\boot_common.py", line 69, in ?
     import linecache
ImportError: No module named linecache
Traceback (most recent call last):
   File "weekday1.py", line 8, in ?
     import datetime
ImportError: No module named datetime

which might not have been enough for you to figure out the problem but 
it is at least a clue in the right direction.


Dick Moores wrote:
> Thanks, Kent. I've gotten to the point where I can create an exe in 
> Python23/dist of a script in Python23. For example, from weekday1.py 
> I've created weekday1.exe. When I double-click on 
> Python/dist/weekday1.exe, it works fine in a consol window. But when I 
> copy weekday1.exe to my desktop, all I get is a flash of a console 
> window opening and closing when I execute it.
> Here's weekday1.py: <http://www.rcblue.com/Python/weekday1.py>
> And setup.py: <http://www.rcblue.com/Python/setup.py>
> Can you tell me what's wrong?
> Thanks,
> Dick
> Kent Johnson wrote at 19:47 11/13/2004:
>> Dick,
>> The script you are using is an attempt to automate the use of py2exe 
>> so you don't have to create setup.py for each script. I suggest you 
>> try a manual approach.
>> I downloaded and installed py2exe. I opened a DOS console to 
>> C:\Python23\Lib\site-packages\py2exe\samples\simple and typed
>> > python setup.py py2exe
>> This created a dist directory with two executables - a console program 
>> and a wxPython program.
>> Does this work for you?
>> If it does, the next step is to copy setup.py from the samples dir to 
>> the dir where your program is, and modify it appropriately. It's a 
>> pretty simple file, this isn't be hard.
>> If you can't get that to work, you might want to ask on the py2exe 
>> mailing list, we don't seem to have any experts here.
>> Kent
>> Dick Moores wrote:
>>> This is my second attempt to get some help. I'd REALLY like to be 
>>> able to use py2exe:
>>> Am I the only one having trouble with this? Here's what I did, and 
>>> what happens.
>>> I'm running Win XP and Python 2.3.4.
>>> I installed py2exe from 
>>> http://starship.python.net/crew/theller/py2exe/ .
>>> I created setup.py. But in order to have it run I changed the 3rd 
>>> line of lookdir() to   if look.lower() == "y":
>>> I created the batch file, which I named test.bat. I used the line 
>>> cd\python23 as is, because that's where my python23 is.
>>> When I run test.bat I get
>>> "Current directory is: C:\Python23
>>> Do you wish to see what's in directory?"
>>> If I answer "y" I'm correctly shown what's in Python23, and asked,
>>> "What is the file you want as an executable? (Type 'quit' to break 
>>> out of loop) ?"
>>> I type "weekday.py" a script I have in Python23.
>>> The "DOS" (consol?) window closes immediately.
>>> That's it. No creation of weekday.exe.
>>> Have I done something wrong. Or what?
>>> Thanks, tutors.
>>> Dick Moores
>>> rdm at rcblue.com
>>> At 19:59 11/9/2004, Jacob S. wrote:
>>>> This is what I did.
>>>> I'm using Windows XP, but it would work for any other windows 
>>>> version...
>>>> 1) Take code below and copy into file named "setup.py".
>>>> ### Start of Code ###
>>>> from distutils.core import setup
>>>> import py2exe
>>>> import os
>>>> def lookdir():
>>>>     print "Current directory is: %s" % os.getcwd()
>>>>     look = raw_input('Do you wish to see what\'s in directory? ')
>>>>     if look.lower() in m:
>>>>         print "\n".join(os.listdir(os.getcwd()))
>>>> def changedir():
>>>>     m = ['y','ye','yes','yep','okay','affirmative','sure']
>>>>     ask = 'y'
>>>>     lookdir()
>>>>     while ask not in m:
>>>>         di = raw_input('What directory do you want? ')
>>>>         os.chdir(di)
>>>>         lookdir()
>>>>         ask = raw_input('Do you want this directory? ')
>>>> changedir()
>>>> listed = []
>>>> while 1:
>>>>     ask = raw_input('What is the file you want as an executable? (Type
>>>> \'quit\' to break out of loop) ')
>>>>     if ask == 'quit' or ask == 'stop' or ask == '':
>>>>         break
>>>>     else:
>>>>         listed.append(os.path.join(desktop,ask))
>>>> setup(console = listed)
>>>> ### End of Code ###
>>>> 2) Take following code and save as a batch file. You will have to 
>>>> change the
>>>> second line to change the directory to your python dir
>>>> rem Start of Code
>>>> @echo off
>>>> cd\python23
>>>> start python setup.py py2exe
>>>> rem End of Code
>>>> 3) Run the batch file. It will ask you which directory the script 
>>>> file is
>>>> in. That would be the file that you're trying to make and 
>>>> executable. Then,
>>>> when you decide which directory it is in, it will ask you the name 
>>>> of the
>>>> file. You type in the name. If you want more than one file, you can 
>>>> type in
>>>> another file name in the next prompt, else you can type in 'quit' or 
>>>> 'stop'
>>>> or just hit enter. When all is done and the shell window closes, you 
>>>> can
>>>> check out the directory that you chose. In that directory, there 
>>>> will be two
>>>> new folders. One is labeled build. That folder is not necessary to 
>>>> run your
>>>> executable and can be deleted. I usually delete it. The other is 
>>>> labeled
>>>> dist. It contains the files needed for your program. Your program 
>>>> will have
>>>> the same name, just with a exe extension instead of a py extension. 
>>>> Send the
>>>> whole folder on to your students, and they can double-click on the 
>>>> exe file,
>>>> and it will run your script as if you double-clicked it in Windows 
>>>> Explorer.
>>>> Also, in your code (which I will try to rewrite for fun on my own (no
>>>> offense)) you might try this instead:
>>>> print "".join(["\t","\\"*7," ","\\"*4," ","\\"*6," ","\\"*7," 
>>>> ","\\"*2,"
>>>> ","\\"*10," ","\\"*2," ","\\"*8,"\n"])
>>>> Ignore the underline and blue if it shows up in your email thing.
>>>> This just shows that you can multiply a particular string by an 
>>>> integer to
>>>> copy it.
>>>> Hope all this helps,
>>>> Jacob Schmidt
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> http://mail.python.org/mailman/listinfo/tutor
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> http://mail.python.org/mailman/listinfo/tutor
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor

More information about the Tutor mailing list