Re: [PyInstaller] os.environ['_MEIPASS2'] points to non-existent directory on Win XP - SOLVED!

119 views
Skip to first unread message

Peter Scheie

unread,
Mar 31, 2010, 4:27:40 PM3/31/10
to pyins...@googlegroups.com
Problem solved!  In the spec file, I had the values in the tuple for a.datas in the wrong order.  I had been trying to use

a.datas += [('c:\\fdu\zeus.p12','DATA','zeus.p12')]

when it should have been

a.datas += [('zeus.p12','c:\\fdu\\zeus.p12','DATA')]

Once I changed that, Build.py succeeds, zeus.p12 is included in the .exe file and is available in the run-time temp directory.

On Wed, Mar 31, 2010 at 1:56 PM, Peter Scheie <psc...@gmail.com> wrote:
Update: Following the suggestion from Build.py (hey, there's a novel idea), I installed pywin32, and now Build.py runs successfully, and I get copyfile.exe.  That's the good news.  The bad news is that when I run copyfile.exe I still get the error about it not being able to find the file I added in as data ("zeus.p12"):

C:\fdu\dist>copyfile
Enter a letter: d

Traceback (most recent call last):
  File "<string>", line 13, in <module>
  File "C:\fdu\build\pyi.win32\copyfile\outPYZ1.pyz/shutil", line 85, in copy
  File "C:\fdu\build\pyi.win32\copyfile\outPYZ1.pyz/shutil", line 51, in copyfil
e
IOError: [Errno 2] No such file or directory: 'C:/DOCUME~1/PSCHEI~1.VSI/LOCALS~1
/Temp/_MEI13162/zeus.p12'

The temporary directory IS being created, and there are some files in there, but my zeus.p12 file is not in there.  Here are the files that are in there

03/31/2010  01:38 PM    <DIR>          .
03/31/2010  01:38 PM    <DIR>          ..
03/31/2010  01:38 PM            32,768 bz2.pyd
03/31/2010  01:38 PM           155,648 MSVCR71.dll
03/31/2010  01:38 PM            13,312 POWRPROF.dll
03/31/2010  01:38 PM           750,592 python25.dll
03/31/2010  01:38 PM            51,712 pywintypes25.dll
03/31/2010  01:38 PM           142,848 unicodedata.pyd
03/31/2010  01:38 PM            31,744 win32api.pyd
               7 File(s)      1,178,624 bytes

The spec file, with the added a.datas is listed in my previous message.  So, I'm closer, but not quite there yet.  Anything obvious that I'm missing?


On Wed, Mar 31, 2010 at 11:39 AM, Peter Scheie <psc...@gmail.com> wrote:
Short answer: The directory is there (I was mistaken about it being missing), but the file my script uses is not.

Long answer: I wonder if I've somehow got something weird in my environments.  As mentioned in my other topic, I was able to run the Build.py script with my real project and with a test script called copyfile.py if I had the files on the C: drive in the Windows XP VM (VirtualBox) on my Ubuntu 9.04 laptop at home; if the files were on a network mapped drive, I got "No such file or directory: 'DATA'" errors, and I am getting those same errors on the XP VM on Ubuntu 9.10 on my machine at the office.  Today, I brought my laptop from home into the office, and now I'm getting the same "No such file or directory: 'DATA'" error, where it had been working fine just last night.  So, here's my simple script, called copyfile.py:

#!/usr/bin/python
# Copy a file.  The file is included in the --onefile output of pyinstaller.
import os
import shutil
# prompts for input are so I can see what is happening
ans = raw_input("Enter a letter: ")
src = os.path.join(os.environ['_MEIPASS2'], 'zeus.p12')
dest = "./Bzeus.p12"
shutil.copy(src,dest)
ans = raw_input("Enter a number: ")

The script sits in c:\fdu, so then, while I'm in the c:\fdu directory I run
c:\python25\python.exe c:\pyinstaller\Makespec.py -X --onefile copyfile.py

and it responds
wrote C:\fdu\copyfile.spec
now run Build.py to build the executable

Then I edit the spec file, adding the a.datas line, so that it looks like this:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'copyfile.py'],
             pathex=['C:\\fdu'])
a.datas += [('C:\\fdu\\zeus.p12','DATA','zeus.p12')]
pyz = PYZ(a.pure)
exe = EXE( pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name=os.path.join('dist', 'copyfile.exe'),
          debug=False,
          strip=False,
          upx=True,
          console=True )

Then I run
c:\python25\python.exe c:\pyinstaller\Build.py copyfile.spec

At home on my laptop it worked,  (I don't have the output handy) producing copyfile.exe, but which then gave an error about not being able to find the zeus.p12 file.  But now on that same laptop but in the office, as well as on my office machine, it gives me this:

checking Analysis
building because copyfile.py changed
running Analysis outAnalysis0.toc
Analyzing: c:\pyinstaller\support\_mountzlib.py
Analyzing: c:\pyinstaller\support\useUnicode.py
Analyzing: copyfile.py
W: Cannot determine your Windows or System directories
W: Please add them to your PATH if .dlls are not found
W: or install http://sourceforge.net/projects/pywin32/
C:\fdu\build\pyi.win32\copyfile\outAnalysis0.toc no change!
checking PYZ
checking PKG
building because copyfile.py changed
building PKG outPKG3.pkg
Cannot find ('C:\fdu\zeus.p12', 'DATA', 0, 'b')
Traceback (most recent call last):
  File "c:\pyinstaller\Build.py", line 1160, in <module>
    main(args[0], configfilename=opts.configfile)
  File "c:\pyinstaller\Build.py", line 1148, in main
    build(specfile)
  File "c:\pyinstaller\Build.py", line 1111, in build
    execfile(spec)
  File "copyfile.spec", line 15, in <module>
    console=True )
  File "c:\pyinstaller\Build.py", line 661, in __init__
    strip_binaries=self.strip, upx_binaries=self.upx, crypt=self.crypt)
  File "c:\pyinstaller\Build.py", line 561, in __init__
    self.__postinit__()
  File "c:\pyinstaller\Build.py", line 196, in __postinit__
    self.assemble()
  File "c:\pyinstaller\Build.py", line 618, in assemble
    archive.build(self.name, mytoc)
  File "c:\pyinstaller\archive.py", line 229, in build
    self.add(tocentry)   # the guts of the archive
  File "c:\pyinstaller\carchive.py", line 235, in add
    s = open(pathnm, 'rb').read()
IOError: [Errno 2] No such file or directory: 'DATA'

I must be doing something incorrectly, but I can't see what it is.  Perhaps it's related to the warning about it not being able to determine the Windows or System directories (?).

Peter



On Wed, Mar 31, 2010 at 4:34 AM, Giovanni Bajo <ra...@develer.com> wrote:
On Tue, 2010-03-30 at 20:08 -0600, Peter Scheie wrote:
> In my python script, I'm trying to copy a file from
> os.environ['_MEIPASS2'], which appears to point to
> C:/DOCUME~1/PETER/LOCALS~1/Temp/_MEI5322/. The file is supposed to be
> placed there by the a.datas method in the spec file. However, the
> directory doesn't exist.  Is this something I have to create in my
> script so that the script can place the file (included in the .exe)
> there at run time?  I was under the impression that it was created
> automatically/dynamically.

The directory is created at startup and removed after the application
exits. I am not aware of any bug where _MEIPASS2 at runtime points to a
directory which it does not exist, and it sounds very weird to me.

Can you reproduce your problem with a working program that you can
share?


--
Giovanni Bajo   ::  ra...@develer.com
Develer S.r.l.  ::  http://www.develer.com

My Blog: http://giovanni.bajo.it
Last post: C++ and copy-on-write data structures

--
You received this message because you are subscribed to the Google Groups "PyInstaller" group.
To post to this group, send email to pyins...@googlegroups.com.
To unsubscribe from this group, send email to pyinstaller...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/pyinstaller?hl=en.




Reply all
Reply to author
Forward
0 new messages