Steven D'Aprano wrote:
On Tue, 02 Jun 2009 01:46:23 +0200, Stef Mientki wrote:

MRAB wrote:
Stef Mientki wrote:
hello,

I've pictures stored in a path relative to my python source code. To
get a picture, I need to know what path I'm on in each python module.
I thought __file__ would do the job,
but apparently I didn't read the documentation carefully enough,
because file is the path to the module that called my module.

Any ways to get the path of "myself" ?

I'm not sure what you mean. I just did a quick test.

# File: C:\Quick test\child.py
print "name is %s" % __name__
print "file is %s" % __file__

# File: C:\Quick test\parent.py
import child

print "name is %s" % __name__
print "file is %s" % __file__

# Output:
name is child
file is C:\Quick test\child.py
name is __main__
file is C:\Quick test\parent.py
Yes, that's what I (and many others) thought, but now put your code in a
file, let's say the file "test.py", and now run this file by :
    execfile ( 'test.py' )

In that case, test.py is not a module. It's just a file that by accident has a .py extension, which is read into memory and executed.

If you bypass the module mechanism, don't be surprised that you've bypassed the module mechanism :)

What are you trying to do? Using execfile is probably not the right solution.

Maybe you're right, and it's not the best solution for my problem.
I've written a program, that contains many files, both python files and data files,
and I would like to distribute the program.
For Linux, I'll just bundle the files in a zip-file,
but for windows I want to make a one button installer,
and the files generated by Py2Exe, don't work at all.

Through this discussion, I discovered another problem,
because __file__ isn't the current file,
I can't run 1 module(file) from another module (file) .

The structure of my files is something like this:

Base_Path
 Main_Program_Path
   Main_Program_1.py
   Main_Program_2.py
   Brick_Path
     Brick_1.py
     Brick_2.py
 Support_Libraries
   Support_Library_1.py
   Support_Library_2.py
 Sounds_Path
   Sound_1.wav
   Sound_2.wav
 Picture_Path
   Picture_1.png
   Picture_2.bmp

The Main_Programs, should be able to "run/launch" other Main_Programs and Support_Libraries,
in several ways (wait / nowait, fetch output or not, ... ).
So each Support_Libraries will have a "main-section".
Everything is highly dynamical, just dumping a new py-file in the Brick_Path, will make the py-files available ( i.e. directly visible and usable to the user) in all Main_Programs.

Moving the complete file-structure to Linux or Windows works good.

Distributing the files through Py2Exe doesn't work at all.
So I was thinking of a hack:
- make dummy programs, that will start Main_Program_x.py through a execfile function
- Create executables with Py2Exe of the dummy programs
- add manually the whole directory structure to the files generated by Py2Exe
- automate the above process by Inno setup

Any suggestions ?

thanks,
Stef






--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to