From: Chad H. <cha...@gm...> - 2004-09-15 18:34:29
|
I have three scripts that I want to distribute together in a single directory using py2exe. I want them to share core libraries, etc. For various source code control reasons, the sources for the three scripts are in different source directories (one in the parent dir and two in subdirs.) I cannot seem to get py2exe to include the modules that are imported by the scripts in the subdirs. I have made a very simplified example that illustrates the problem. Here is the directory structure and the files in question: c:\src\fun\examples\ - parent.py - parent_module.py - setup.py -| a\ (directory) - a.py - a_module.py -| b\ (directory) - b.py - b_module.py Here are the contents of the files (I tried to keep them short): parent.py ---------------------------------------------------------------- from parent_module import ParentModule def main(): pm = ParentModule('I am the parent') pm.hello() main() ---------------------------------------------------------------- parent_module.py ---------------------------------------------------------------- class ParentModule: def __init__(self, helloStr): self.helloStr = helloStr def hello(self): print 'ParentModule.hello:', self.helloStr ---------------------------------------------------------------- setup.py ---------------------------------------------------------------- from distutils.core import setup import py2exe setup(console = [ {'script': r'parent.py', }, {'script': r'a\a.py', }, {'script': r'b\b.py', } ] ) ---------------------------------------------------------------- a.py ---------------------------------------------------------------- from a_module import AModule def main(): am = AModule('Hello there...') am.hello() main() ---------------------------------------------------------------- a_module.py ---------------------------------------------------------------- class AModule: def __init__(self, helloStr): self.helloStr = helloStr def hello(self): print 'AModule.hello:', self.helloStr ---------------------------------------------------------------- b.py ---------------------------------------------------------------- from b_module import BModule def main(): bm = BModule("Howdy y'all...") bm.hello() main() ---------------------------------------------------------------- b_module.py ---------------------------------------------------------------- class BModule: def __init__(self, helloStr): self.helloStr = helloStr def hello(self): print 'BModule.hello:', self.helloStr ---------------------------------------------------------------- When I run 'setup.py py2exe', I get the following message at the end of the process: The following modules appear to be missing ['a_module', 'b_module'] The rest of the process appears to be successful and the dist directory contains the expected libraries as well as parent.exe, a.exe, and b.exe. The parent.exe file works as expected: C:\src\fun\examples\dist>parent.exe ParentModule.hello: I am the parent When I run a.exe, I get: C:\src\fun\examples\dist>a.exe Traceback (most recent call last): File "a.py", line 1, in ? ImportError: No module named a_module b.exe gives a similar error message. Can anyone see a way to get py2exe to include the modules needed by a.py and b.py? I'd rather not have an explicit include list, since there are many imports (in my real program) and the include list could easily become out of sync with the code. If that is the only way, so be it. I am hoping there is a better way... Any assistance is appreciated, Chad |
From: Thomas H. <th...@py...> - 2004-09-15 19:41:06
|
Chad Harrington <cha...@gm...> writes: > I have three scripts that I want to distribute together in a > single directory using py2exe. I want them to share core > libraries, etc. For various source code control > reasons, the sources for the three scripts are in different > source directories (one in the parent dir and two in subdirs.) > I cannot seem to get py2exe to include the modules that are > imported by the scripts in the subdirs. I have made a very > simplified example that illustrates the problem. > > > Here is the directory structure and the files in question: > > c:\src\fun\examples\ > - parent.py > - parent_module.py > - setup.py > -| a\ (directory) > - a.py > - a_module.py > -| b\ (directory) > - b.py > - b_module.py You could try to set sys.path in your setup script, so that the a and the b directory are both included - that should help, but you have to lookout for conflicts if you have modules with the same name both in the current, the a, and the b directories. Thomas |
From: Chad H. <cha...@gm...> - 2004-09-15 21:09:40
|
Adding 'a' and 'b' to sys.path works beautifully. Thank you very much for the tip. Chad On Wed, 15 Sep 2004 21:40:52 +0200, Thomas Heller <th...@py...> wrote: > Chad Harrington <cha...@gm...> writes: > > > I have three scripts that I want to distribute together in a > > single directory using py2exe. I want them to share core > > libraries, etc. For various source code control > > reasons, the sources for the three scripts are in different > > source directories (one in the parent dir and two in subdirs.) > > I cannot seem to get py2exe to include the modules that are > > imported by the scripts in the subdirs. I have made a very > > simplified example that illustrates the problem. > > > > > > Here is the directory structure and the files in question: > > > > c:\src\fun\examples\ > > - parent.py > > - parent_module.py > > - setup.py > > -| a\ (directory) > > - a.py > > - a_module.py > > -| b\ (directory) > > - b.py > > - b_module.py > > You could try to set sys.path in your setup script, so that the a and > the b directory are both included - that should help, but you have to > lookout for conflicts if you have modules with the same name both in the > current, the a, and the b directories. > > Thomas > > |