From: Adam E. <ia...@ne...> - 2011-08-08 07:57:16
|
We are working on developing a python application that allows us to update our modules by automatically downloading them from a website. We have a preloader system that identifies the files that need to be updated via MD5 and downloads it, and then imports the main program and runs it. The main program works perfectly before compile. After compiling it though, it immediately errors out at importing Lib.GeneralFunctions GeneralFunctions is confirmed to be in the Lib directory as it should be, but the program does not want to see it at all. Here is a copy of the setup.py file http://www.mediafire.com/?sc538o3i63f0lw0 Basically, once py2exe is used, Python does not see/use the Lib folder What should I be doing? |
From: Adam E. <ia...@ne...> - 2011-08-08 09:31:59
|
On the same note, is there a way to exclude it from bundling specific .py files? We would like to update the main application using the preloader, but since py2exe will bundle the files, we wouldn't be able to do that. Would we be able to use a custom importer in the same way to import the .py file (Obviously compiled) outside of the .exe, just like we would with the Lib files? On Mon, Aug 8, 2011 at 5:20 AM, Massa, Harald Armin <ch...@gh...> wrote: > Adam, > > >> Basically, once py2exe is used, Python does not see/use the Lib folder >> >> that is the expected behavious. py2exe goes through great pains to load > modules from the library.zip or, in case of single-file-distribution, from > the library file integrated in the single file. > > That behaviour can be changed. You have to add your "own" importer (which > should be nothing more then the standard file-system-importer) to the chain > of importers > > I do not know of a one click solution. Read up on importers: > > http://docs.python.org/library/imputil.html > http://docs.python.org/release/2.3.5/whatsnew/section-pep302.html > http://www.doughellmann.com/PyMOTW/sys/imports.html > > (The "import chain" has to be modified within your application when > py2exed.) > > It is definitely possible to solve your challenge; to read more background > you may use the google words "python custom importer". > > Best wishes > > Harald > > -- > GHUM GmbH > Harald Armin Massa > Spielberger Straße 49 > 70435 Stuttgart > 0173/9409607 > > Amtsgericht Stuttgart, HRB 734971 > - > persuadere. > et programmare > Python consulting & development & training > |
From: Massa, H. A. <ch...@gh...> - 2011-08-08 10:03:18
|
> On the same note, is there a way to exclude it from bundling specific .py > files? > > Oh, the solution I recommended is spefically for use with .py / .pyc / .pyo files. The do not even need to be compiled (.pyc, pyo) I think I missunderstood: it sounded as you were looking to include some modules. To load .pyd and similiar from other places, you may need to check the specific library loading patch py2exe does. Harald -- GHUM GmbH Harald Armin Massa Spielberger Straße 49 70435 Stuttgart 0173/9409607 Amtsgericht Stuttgart, HRB 734971 - persuadere. et programmare |
From: Adam E. <ia...@ne...> - 2011-08-08 09:43:13
|
The original question was regarding modules, but as I had pointed out our preloader loads the main application by importing and running it. Py2exe automatically sees this and bundles all of the .py files for the application. I'm assuming this means I would need to use a separate importer in the same manner as with the module files to import and run the application when it is updated. On Mon, Aug 8, 2011 at 5:32 AM, Massa, Harald Armin <ch...@gh...> wrote: > > On the same note, is there a way to exclude it from bundling specific .py >> files? >> >> Oh, the solution I recommended is spefically for use with .py / .pyc / > .pyo files. The do not even need to be compiled (.pyc, pyo) > > I think I missunderstood: it sounded as you were looking to include some > modules. To load .pyd and similiar from other places, you may need to check > the specific library loading patch py2exe does. > > Harald > > -- > GHUM GmbH > Harald Armin Massa > Spielberger Straße 49 > 70435 Stuttgart > 0173/9409607 > > Amtsgericht Stuttgart, HRB 734971 > - > persuadere. > et programmare > |
From: Massa, H. A. <ch...@gh...> - 2011-08-08 09:52:30
|
> > importing and running it. Py2exe automatically sees this and bundles all of > the .py files for the application. I'm assuming this means I would need to > use a separate importer in the same manner as with the module files to > import and run the application when it is updated. > > yes. That may even save you the preloader. Look at the exclude - parameters, often it is possible to stop py2exe from including stuff. I recommend to read the py2exe source, especially the part of the components py2exe puts into the startup of the resulting .exe. Reading those few pages of code will make your problem solving much faster. Harald -- GHUM GmbH Harald Armin Massa Spielberger Straße 49 70435 Stuttgart 0173/9409607 Amtsgericht Stuttgart, HRB 734971 - persuadere. et programmare |
From: Massa, H. A. <ch...@gh...> - 2011-08-08 09:51:48
|
Adam, > Basically, once py2exe is used, Python does not see/use the Lib folder > > that is the expected behavious. py2exe goes through great pains to load modules from the library.zip or, in case of single-file-distribution, from the library file integrated in the single file. That behaviour can be changed. You have to add your "own" importer (which should be nothing more then the standard file-system-importer) to the chain of importers I do not know of a one click solution. Read up on importers: http://docs.python.org/library/imputil.html http://docs.python.org/release/2.3.5/whatsnew/section-pep302.html http://www.doughellmann.com/PyMOTW/sys/imports.html (The "import chain" has to be modified within your application when py2exed.) It is definitely possible to solve your challenge; to read more background you may use the google words "python custom importer". Best wishes Harald -- GHUM GmbH Harald Armin Massa Spielberger Straße 49 70435 Stuttgart 0173/9409607 Amtsgericht Stuttgart, HRB 734971 - persuadere. et programmare Python consulting & development & training |
From: Mark H. <ski...@gm...> - 2011-08-08 09:57:54
|
On 8/08/2011 4:55 PM, Adam Estes wrote: > We are working on developing a python application that allows us to > update our modules by automatically downloading them from a website. > > We have a preloader system that identifies the files that need to be > updated via MD5 and downloads it, and then imports the main program and > runs it. The main program works perfectly before compile. After > compiling it though, it immediately errors out at importing > Lib.GeneralFunctions > > GeneralFunctions is confirmed to be in the Lib directory as it should > be, but the program does not want to see it at all. > > Here is a copy of the setup.py file > > http://www.mediafire.com/?sc538o3i63f0lw0 > > Basically, once py2exe is used, Python does not see/use the Lib folder > > What should I be doing? You might find that simply adding stuff to sys.path before you do the imports will work. Mark |
From: Adam E. <ia...@ne...> - 2011-08-08 10:54:37
|
I used the following code path = os.getcwd() sys.path.append(path) sys.path.append(path + '/Lib') path2 = os.walk(path + '/Lib') for dirpath, dirnames, filenames in path2: sys.path.append(path + dirpath) To add everything in the lib folder to the sys path. Everything works perfectly, until we compile it, and then it doesn't work. :( On Mon, Aug 8, 2011 at 5:57 AM, Mark Hammond <ski...@gm...>wrote: > On 8/08/2011 4:55 PM, Adam Estes wrote: > >> We are working on developing a python application that allows us to >> update our modules by automatically downloading them from a website. >> >> We have a preloader system that identifies the files that need to be >> updated via MD5 and downloads it, and then imports the main program and >> runs it. The main program works perfectly before compile. After >> compiling it though, it immediately errors out at importing >> Lib.GeneralFunctions >> >> GeneralFunctions is confirmed to be in the Lib directory as it should >> be, but the program does not want to see it at all. >> >> Here is a copy of the setup.py file >> >> http://www.mediafire.com/?**sc538o3i63f0lw0<http://www.mediafire.com/?sc538o3i63f0lw0> >> >> Basically, once py2exe is used, Python does not see/use the Lib folder >> >> What should I be doing? >> > > You might find that simply adding stuff to sys.path before you do the > imports will work. > > Mark > |
From: Adam E. <ia...@ne...> - 2011-08-08 11:22:52
|
This is the contents of sys,path from the .exe ['C:\\Program Files\\Neocodex\\Manager\\pre_loader.exe', 'C:\\Program Files\\Neocodex\\Manager', 'C:\\Program Files\\Neocodex\\Manager/Lib'] (I removed the importing of every single directory inside Lib to reduce the spam) It shows the proper Lib Directory, as it should. The specific error is: Traceback (most recent call last): File "pre_loader.py", line 66, in <module> File "__init__.pyo", line 8, in <module> File "ProgramManager.pyo", line 35, in <module> File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper File "PluginManager.pyo", line 9, in <module> File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper ImportError: No module named GeneralFunctions Which is this line from GeneralFunctions import * And GeneralFunctions is a folder inside of the Lib folder containing _init_.pyc filemanagement.py staticimages.py Do you need anything else? On Mon, Aug 8, 2011 at 7:08 AM, King Simon-NFHD78 < sim...@mo...> wrote: > > -----Original Message----- > > From: Adam Estes [mailto:ia...@ne...] > > Sent: 08 August 2011 11:55 > > To: mha...@sk... > > Cc: py2...@li... > > Subject: Re: [Py2exe-users] Python and independent modules > > > > I used the following code > > > > path = os.getcwd() > > sys.path.append(path) > > sys.path.append(path + '/Lib') > > path2 = os.walk(path + '/Lib') > > for dirpath, dirnames, filenames in path2: > > sys.path.append(path + dirpath) > > > > To add everything in the lib folder to the sys path. Everything works > > perfectly, until we compile it, and then it doesn't work. :( > > > > Have you tried printing out sys.path after you've appended those > directories (in the py2exe-d version)? There are a couple of potential > problems with your approach: > > a) I don't think os.getcwd() is guaranteed to return the directory > containing your .exe. You'd be better off using one of the suggestions > on http://www.py2exe.org/index.cgi/WhereAmI > > b) I think os.getcwd() will return an absolute path, which means that > 'dirpath' in your 'for' loop will also be an absolute path. 'path + > dirpath' will therefore be invalid. In general you should use > os.path.join to do these kinds of path manipulations. > > If neither of these suggestions fix your problem, perhaps you could show > us the contents of sys.path and the exact error message, and we might be > able to help further. > > Cheers, > > Simon > |
From: Aahz <aa...@py...> - 2011-08-08 15:53:47
|
On Mon, Aug 08, 2011, Adam Estes wrote: > > from GeneralFunctions import * Side note: Don't Do That You will make your life difficult. Import names explicitly. -- Aahz (aa...@py...) <*> http://www.pythoncraft.com/ "If you don't know what your program is supposed to do, you'd better not start writing it." --Dijkstra |
From: Adam E. <ia...@ne...> - 2011-08-08 11:44:33
|
Yes, sorry. It is double underscored. On Mon, Aug 8, 2011 at 7:43 AM, King Simon-NFHD78 < sim...@mo...> wrote: > > -----Original Message----- > > From: Adam Estes [mailto:ia...@ne...] > > Sent: 08 August 2011 12:23 > > To: King Simon-NFHD78 > > Cc: mha...@sk...; py2...@li... > > Subject: Re: [Py2exe-users] Python and independent modules > > > > This is the contents of sys,path from the .exe > > > > ['C:\\Program Files\\Neocodex\\Manager\\pre_loader.exe', 'C:\\Program > > Files\\Neocodex\\Manager', 'C:\\Program Files\\Neocodex\\Manager/Lib'] > > > > > > (I removed the importing of every single directory inside Lib to > > reduce the spam) > > > > It shows the proper Lib Directory, as it should. > > > > The specific error is: > > > > Traceback (most recent call last): > > File "pre_loader.py", line 66, in <module> > > File "__init__.pyo", line 8, in <module> > > File "ProgramManager.pyo", line 35, in <module> > > File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper > > File "PluginManager.pyo", line 9, in <module> > > File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper > > ImportError: No module named GeneralFunctions > > > > Which is this line > > > > from GeneralFunctions import * > > > > And GeneralFunctions is a folder inside of the Lib folder containing > > > > _init_.pyc > > filemanagement.py > > staticimages.py > > > > Is that "_init_.pyc" a typo? It needs to have double-underscores to be > considered a package (__init__.pyc) > > Simon > |
From: Mark H. <mha...@sk...> - 2011-08-08 12:52:58
|
If your exe is a console program, try setting a PYTHON_VERBOSE env var - you should see lots of output about what is being looked at to resolve an import. It may well be that py2exe pulls more tricks than I can remember so an import hook is your only option, but I think the above should help either way... Mark On 8/08/2011 9:22 PM, Adam Estes wrote: > This is the contents of sys,path from the .exe > > ['C:\\Program Files\\Neocodex\\Manager\\pre_loader.exe', 'C:\\Program > Files\\Neocodex\\Manager', 'C:\\Program Files\\Neocodex\\Manager/Lib'] > > (I removed the importing of every single directory inside Lib to reduce > the spam) > > It shows the proper Lib Directory, as it should. > > The specific error is: > > Traceback (most recent call last): > File "pre_loader.py", line 66, in <module> > File "__init__.pyo", line 8, in <module> > File "ProgramManager.pyo", line 35, in <module> > File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper > File "PluginManager.pyo", line 9, in <module> > File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper > ImportError: No module named GeneralFunctions > > Which is this line > > from GeneralFunctions import * > > And GeneralFunctions is a folder inside of the Lib folder containing > > _init_.pyc > filemanagement.py > staticimages.py > > > Do you need anything else? > > > On Mon, Aug 8, 2011 at 7:08 AM, King Simon-NFHD78 > <sim...@mo... > <mailto:sim...@mo...>> wrote: > > > -----Original Message----- > > From: Adam Estes [mailto:ia...@ne... > <mailto:ia...@ne...>] > > Sent: 08 August 2011 11:55 > > To: mha...@sk... <mailto:mha...@sk...> > > Cc: py2...@li... > <mailto:py2...@li...> > > Subject: Re: [Py2exe-users] Python and independent modules > > > > I used the following code > > > > path = os.getcwd() > > sys.path.append(path) > > sys.path.append(path + '/Lib') > > path2 = os.walk(path + '/Lib') > > for dirpath, dirnames, filenames in path2: > > sys.path.append(path + dirpath) > > > > To add everything in the lib folder to the sys path. Everything works > > perfectly, until we compile it, and then it doesn't work. :( > > > > Have you tried printing out sys.path after you've appended those > directories (in the py2exe-d version)? There are a couple of potential > problems with your approach: > > a) I don't think os.getcwd() is guaranteed to return the directory > containing your .exe. You'd be better off using one of the suggestions > on http://www.py2exe.org/index.cgi/WhereAmI > > b) I think os.getcwd() will return an absolute path, which means that > 'dirpath' in your 'for' loop will also be an absolute path. 'path + > dirpath' will therefore be invalid. In general you should use > os.path.join to do these kinds of path manipulations. > > If neither of these suggestions fix your problem, perhaps you could show > us the contents of sys.path and the exact error message, and we might be > able to help further. > > Cheers, > > Simon > > |
From: Adam E. <ia...@ne...> - 2011-08-08 13:00:51
|
I've been reading through the py2exe source, but so far no luck in finding something that will help me. It looks like I have a lot more reading to do. Thanks for the help. On Mon, Aug 8, 2011 at 8:37 AM, Mark Hammond <mha...@sk...>wrote: > If your exe is a console program, try setting a PYTHON_VERBOSE env var - > you should see lots of output about what is being looked at to resolve an > import. > > It may well be that py2exe pulls more tricks than I can remember so an > import hook is your only option, but I think the above should help either > way... > > Mark > > > On 8/08/2011 9:22 PM, Adam Estes wrote: > >> This is the contents of sys,path from the .exe >> >> ['C:\\Program Files\\Neocodex\\Manager\\pre_**loader.exe', 'C:\\Program >> Files\\Neocodex\\Manager', 'C:\\Program Files\\Neocodex\\Manager/Lib'] >> >> (I removed the importing of every single directory inside Lib to reduce >> the spam) >> >> It shows the proper Lib Directory, as it should. >> >> The specific error is: >> >> Traceback (most recent call last): >> File "pre_loader.py", line 66, in <module> >> File "__init__.pyo", line 8, in <module> >> File "ProgramManager.pyo", line 35, in <module> >> File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper >> File "PluginManager.pyo", line 9, in <module> >> File "rpdb2.pyo", line 13487, in rpdb2_import_wrapper >> ImportError: No module named GeneralFunctions >> >> Which is this line >> >> from GeneralFunctions import * >> >> And GeneralFunctions is a folder inside of the Lib folder containing >> >> _init_.pyc >> filemanagement.py >> staticimages.py >> >> >> Do you need anything else? >> >> >> On Mon, Aug 8, 2011 at 7:08 AM, King Simon-NFHD78 >> <simon.king@motorolasolutions.**com <sim...@mo...> >> <mailto:simon.king@**motorolasolutions.com<sim...@mo...>>> >> wrote: >> >> > -----Original Message----- >> > From: Adam Estes [mailto:ia...@ne... >> <mailto:ia...@ne...>] >> > Sent: 08 August 2011 11:55 >> > To: mha...@sk... <mailto:mhammond@skippinet.**com.au<mha...@sk...> >> > >> > Cc: py2exe-users@lists.**sourceforge.net<py2...@li...> >> <mailto:py2exe-users@lists.**sourceforge.net<py2...@li...> >> > >> > Subject: Re: [Py2exe-users] Python and independent modules >> > >> > I used the following code >> > >> > path = os.getcwd() >> > sys.path.append(path) >> > sys.path.append(path + '/Lib') >> > path2 = os.walk(path + '/Lib') >> > for dirpath, dirnames, filenames in path2: >> > sys.path.append(path + dirpath) >> > >> > To add everything in the lib folder to the sys path. Everything >> works >> > perfectly, until we compile it, and then it doesn't work. :( >> > >> >> Have you tried printing out sys.path after you've appended those >> directories (in the py2exe-d version)? There are a couple of potential >> problems with your approach: >> >> a) I don't think os.getcwd() is guaranteed to return the directory >> containing your .exe. You'd be better off using one of the suggestions >> on http://www.py2exe.org/index.**cgi/WhereAmI<http://www.py2exe.org/index.cgi/WhereAmI> >> >> b) I think os.getcwd() will return an absolute path, which means that >> 'dirpath' in your 'for' loop will also be an absolute path. 'path + >> dirpath' will therefore be invalid. In general you should use >> os.path.join to do these kinds of path manipulations. >> >> If neither of these suggestions fix your problem, perhaps you could >> show >> us the contents of sys.path and the exact error message, and we might >> be >> able to help further. >> >> Cheers, >> >> Simon >> >> >> > |
From: Alexey L. <lu...@an...> - 2011-08-08 13:45:34
|
Hi! You could try to add __init__.py to C:\\Program Files\\Neocodex\\Manager/Lib/. -- Regards, Alex |
From: Adam E. <ia...@ne...> - 2011-08-08 13:46:33
|
The folder has an __init__.py file in it already. On Mon, Aug 8, 2011 at 9:02 AM, Alexey Luchko <lu...@an...> wrote: > Hi! > > You could try to add __init__.py to C:\\Program > Files\\Neocodex\\Manager/Lib/. > > -- > Regards, > Alex > > > > ------------------------------------------------------------------------------ > BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA > The must-attend event for mobile developers. Connect with experts. > Get tools for creating Super Apps. See the latest technologies. > Sessions, hands-on labs, demos & much more. Register early & save! > http://p.sf.net/sfu/rim-blackberry-1 > _______________________________________________ > Py2exe-users mailing list > Py2...@li... > https://lists.sourceforge.net/lists/listinfo/py2exe-users > |
From: Adam E. <ia...@ne...> - 2011-08-08 13:57:43
|
My current implementation is attempting to take this http://diveintopython.org/functional_programming/all_together.html and apply it to my situation. My code looks like this right now (Its pretty horrible, but its just testing purposes) path = os.getcwd() # Get path files = os.listdir(path + '/lib') #Everything in the lib folder filenameToModuleName = lambda f: os.path.splitext(f)[0] #Removed .py appendLib = lambda f: os.path.join(path + '/lib/', f) #Adds Lib moduleNames2 = map(filenameToModuleName, files) #Remove the .py moduleNames = [] #Blank list for x in moduleNames2: #Filter our module list if x.startswith('__'): #Skip __init__.py files continue if os.path.isdir(path + '/lib/' +x): #If its a directory, add a / x = x + '/' if x not in moduleNames: #Don't add duplicates to the list moduleNames.append(x) moduleNames.remove('/') #Remove base folder moduleNames = map(appendLib, moduleNames) #Add Lib modules = map(__import__, moduleNames) #Import files After getting a lot of errors about GeneralFunctions not existing.I added in the / filter and that changed the error to Traceback (most recent call last): File "programmanager.py", line 46, in <module> modules = map(__import__, moduleNames) #Import files File "C:\Python\lib\site-packages\rpdb2.py", line 13502, in rpdb2_import_wrapper m = g_import(*args, **kwargs) ImportError: No module named C:\Users\Adam\Documents\Programming Files\trunk\Program Manager/lib/CodexSettings CodexSettings is a .py file in the /lib/ directory (This is all before the py2exe compile. Don't even know if it will work after the py2exe compile) Any suggestions? On Mon, Aug 8, 2011 at 9:02 AM, Alexey Luchko <lu...@an...> wrote: > Hi! > > You could try to add __init__.py to C:\\Program > Files\\Neocodex\\Manager/Lib/. > > -- > Regards, > Alex > > > > ------------------------------------------------------------------------------ > BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA > The must-attend event for mobile developers. Connect with experts. > Get tools for creating Super Apps. See the latest technologies. > Sessions, hands-on labs, demos & much more. Register early & save! > http://p.sf.net/sfu/rim-blackberry-1 > _______________________________________________ > Py2exe-users mailing list > Py2...@li... > https://lists.sourceforge.net/lists/listinfo/py2exe-users > |
From: Aahz <aa...@py...> - 2011-08-08 15:56:07
|
On Mon, Aug 08, 2011, Adam Estes wrote: > > We are working on developing a python application that allows us to update > our modules by automatically downloading them from a website. > > We have a preloader system that identifies the files that need to be updated > via MD5 and downloads it, and then imports the main program and runs it. The > main program works perfectly before compile. After compiling it though, it > immediately errors out at importing Lib.GeneralFunctions You might find it easier to have your pre-loader run in a separate process that launches the main app. You may get better help on this list if you can reduce your problem to a few lines of code. (It's also likely to help you find your own problem.) -- Aahz (aa...@py...) <*> http://www.pythoncraft.com/ "If you don't know what your program is supposed to do, you'd better not start writing it." --Dijkstra |
From: Adam E. <ia...@ne...> - 2011-08-08 15:58:01
|
The problem has be reduced to a few lines of code. I can remove everything and just have an application that tries to import something thats not included with the .exe and it will cause this issue. On Mon, Aug 8, 2011 at 11:55 AM, Aahz <aa...@py...> wrote: > On Mon, Aug 08, 2011, Adam Estes wrote: > > > > We are working on developing a python application that allows us to > update > > our modules by automatically downloading them from a website. > > > > We have a preloader system that identifies the files that need to be > updated > > via MD5 and downloads it, and then imports the main program and runs it. > The > > main program works perfectly before compile. After compiling it though, > it > > immediately errors out at importing Lib.GeneralFunctions > > You might find it easier to have your pre-loader run in a separate > process that launches the main app. > > You may get better help on this list if you can reduce your problem to a > few lines of code. (It's also likely to help you find your own problem.) > -- > Aahz (aa...@py...) <*> > http://www.pythoncraft.com/ > > "If you don't know what your program is supposed to do, you'd better not > start writing it." --Dijkstra > > > ------------------------------------------------------------------------------ > BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA > The must-attend event for mobile developers. Connect with experts. > Get tools for creating Super Apps. See the latest technologies. > Sessions, hands-on labs, demos & much more. Register early & save! > http://p.sf.net/sfu/rim-blackberry-1 > _______________________________________________ > Py2exe-users mailing list > Py2...@li... > https://lists.sourceforge.net/lists/listinfo/py2exe-users > |
From: Mark H. <ski...@gm...> - 2011-08-08 23:06:45
|
On 9/08/2011 1:57 AM, Adam Estes wrote: > The problem has be reduced to a few lines of code. I can remove > everything and just have an application that tries to import something > thats not included with the .exe and it will cause this issue. Works for me. I've modified the "simple" py2exe sample included with py2exe. test.py has: """ import sys print "hello world" #sys.path.append("o:/temp") import t """ In o:\temp I have a t.py which includes just one line: print "hello from t.py!" Creating the .exe from py2exe, I run it and get the expected: """ hello world Traceback (most recent call last): File "test.py", line 4, in <module> import t ImportError: No module named t """ But if I uncomment the sys.path.append and recreate it, I then get: """ hello world hello from t.py! """ So sys.path modifications in py2exe works fine. Mark |
From: Adam E. <ia...@ne...> - 2011-08-08 23:47:15
|
Wow. I think every single issue I've been having is because I used .pyc. It works fine with .py and .pyc. This is kinda sad :| On Mon, Aug 8, 2011 at 7:06 PM, Mark Hammond <ski...@gm...>wrote: > On 9/08/2011 1:57 AM, Adam Estes wrote: > >> The problem has be reduced to a few lines of code. I can remove >> everything and just have an application that tries to import something >> thats not included with the .exe and it will cause this issue. >> > > Works for me. I've modified the "simple" py2exe sample included with > py2exe. test.py has: > > """ > import sys > print "hello world" > #sys.path.append("o:/temp") > import t > """ > > In o:\temp I have a t.py which includes just one line: > > print "hello from t.py!" > > Creating the .exe from py2exe, I run it and get the expected: > > """ > hello world > > Traceback (most recent call last): > File "test.py", line 4, in <module> > import t > ImportError: No module named t > """ > > But if I uncomment the sys.path.append and recreate it, I then get: > > """ > hello world > hello from t.py! > """ > > So sys.path modifications in py2exe works fine. > > Mark > |
From: Mark H. <ski...@gm...> - 2011-08-09 00:31:57
|
On 9/08/2011 9:47 AM, Adam Estes wrote: > Wow. I think every single issue I've been having is because I used .pyc. > It works fine with .py and .pyc. > > This is kinda sad :| Works for me too - if I run that same test after removing t.py, leaving t.pyc, it also works fine. Mark |
From: Adam E. <ia...@ne...> - 2011-08-09 01:04:15
|
I am unable to import the .pyc files because py2exe is putting everything in .pyo form. Despite me changing compressed to 0. How would I make it create .pyc instead of .pyo? On Mon, Aug 8, 2011 at 8:31 PM, Mark Hammond <ski...@gm...>wrote: > On 9/08/2011 9:47 AM, Adam Estes wrote: > >> Wow. I think every single issue I've been having is because I used .pyc. >> It works fine with .py and .pyc. >> >> This is kinda sad :| >> > > Works for me too - if I run that same test after removing t.py, leaving > t.pyc, it also works fine. > > Mark > |
From: Mark H. <ski...@gm...> - 2011-08-09 01:22:22
|
On 9/08/2011 10:56 AM, Adam Estes wrote: > I am unable to import the .pyc files because py2exe is putting > everything in .pyo form. That can't be correct - py2exe is also creating .pyo files for me in that test - but I can import that module 't' when just the .pyc, or just the .pyo exist. Also, I don't understand why py2exe is looking at your "independent" modules at all - isn't the entire point to have py2exe ignore them and just to import them "normally" at runtime? In that case, I don't understand why you are asking how to get py2exe to create .pyc or .pyo versions of those modules - it should not be touching them. I suggest you take the same sample I did and show us the absolute minimum that demonstrates your problem. Mark |
From: Adam E. <ia...@ne...> - 2011-08-09 01:46:25
|
I changed optimize to 0 in my setup.py file and it fixed the not being able to import .pyc. When it compiles the .exe, it bundles our main application as well as the pre_loader. The pre_loader downloads the main application file (programmanager.pyc) and then imports and it and initates run on it. If we compile the preloader without the .py file for the main application, it fails at running the application after it imports it. Is there a way that we can remove the .py file when we run our preloader, so the only existing version is the one outside of the compiled .exe? On Mon, Aug 8, 2011 at 9:21 PM, Mark Hammond <ski...@gm...>wrote: > On 9/08/2011 10:56 AM, Adam Estes wrote: > >> I am unable to import the .pyc files because py2exe is putting >> everything in .pyo form. >> > > That can't be correct - py2exe is also creating .pyo files for me in that > test - but I can import that module 't' when just the .pyc, or just the .pyo > exist. > > Also, I don't understand why py2exe is looking at your "independent" > modules at all - isn't the entire point to have py2exe ignore them and just > to import them "normally" at runtime? In that case, I don't understand why > you are asking how to get py2exe to create .pyc or .pyo versions of those > modules - it should not be touching them. > > I suggest you take the same sample I did and show us the absolute minimum > that demonstrates your problem. > > Mark > |
From: Mark H. <mha...@sk...> - 2011-08-09 01:51:49
|
On 9/08/2011 11:46 AM, Adam Estes wrote: > I changed optimize to 0 in my setup.py file and it fixed the not being > able to import .pyc. > > When it compiles the .exe, it bundles our main application as well as > the pre_loader. > > The pre_loader downloads the main application file (programmanager.pyc) > and then imports and it and initates run on it. If we compile the > preloader without the .py file for the main application, it fails at > running the application after it imports it. > > Is there a way that we can remove the .py file when we run our > preloader, so the only existing version is the one outside of the > compiled .exe? The above isn't clear to me - a working example is best - but it sounds like you want the 'exclude' option which is listed in the docs. Also, be sure you delete the 'build' and 'dist' directories between trying various things, as stuff from an earlier build may still wound up being included. Mark |