On 12 September 2012 19:27, Michael McCracken <michael.mccrac...@gmail.com>wrote:
> On Wed, Sep 12, 2012 at 10:54 AM, Paul Wiseman <poal...@gmail.com> wrote: > > On 12 September 2012 18:13, Michael McCracken < > michael.mccrac...@gmail.com> > > wrote: > >> > >> On Wed, Sep 12, 2012 at 4:08 AM, Paul Wiseman <poal...@gmail.com> > wrote: > >> > On 10 September 2012 13:18, Ronald Oussoren <ronaldousso...@mac.com> > >> > wrote: > >> >> > >> >> > >> >> On 9 Sep, 2012, at 20:34, Paul Wiseman <poal...@gmail.com> wrote: > >> >> > >> >> Hey, > >> >> > >> >> When building an app that is using sqlalchemy I get this error: > >> >> > >> >> creating python loader for extension 'sqlalchemy.cprocessors' > >> >> error: > >> >> > >> >> > /Users/paul/Source/Python/build/bdist.macosx-10.6-intel/python2.7-standalone/app/temp/sqlalchemy/cprocessors.py: > >> >> No such file or directory > >> >> > >> >> I took a look in site packages and there is no cprocessors.py, but a > >> >> cprocessors.so - so maybe it is just looking for the wrong extension > >> >> > >> >> I tried adding "sqlalchemy.cprocessors" to the includes list in > py2app > >> >> but > >> >> that hasn't helped. > >> >> > >> >> I was wondering if I can fool it by dropping an empty cprocessors.py > so > >> >> it > >> >> will build, then swap it out afterwards for the so, but I'm sure > >> >> there's a > >> >> better way and I'm not convinced that could even work. > >> >> > >> >> Surely py2app doesn't assume every extension is .py, or if it does > can > >> >> it > >> >> be changed? > >> >> > >> >> > >> >> Py2app does not assume that every extension is a python file. Given > the > >> >> messasge I'd say that the error occurs in the code path that creates > a > >> >> helper python file that actually loads the exention. > >> >> > >> >> A little background information: when py2app creates the application > >> >> bundle all modules are stored in a zipfile and loaded using python's > >> >> zipimporter. Extensions cannot be stored in the zipfiles because the > >> >> zipimporter doesn't support that. Py2app therefore creates a > >> >> placeholder > >> >> python module in the zipfile that loads the extensions from a > directory > >> >> in > >> >> the application bundle. > >> >> > >> >> BTW. could you please create a sample project that demonstrates the > >> >> problem? I've tried to reproduce your problem on my machine and > failed > >> >> to do > >> >> so. I did run into another problem, py2app generated an incomplete > >> >> bundle > >> >> due to confusion between a _collections submodule in SQLAlchemy and > the > >> >> _collections extension in the stdlib; that's something I'm currently > >> >> trying > >> >> to fix. > >> >> > >> >> Ronald > >> > > >> > > >> > (Oops just realised I didn't reply to the mailing list before) > >> > > >> > Ah, > >> > > >> > I've found out how to recreate the error > >> > > >> > If I create a main.py with nothing but 'import sqlalchemy' > >> > > >> > then use the following setup.py: > >> > > >> > from setuptools import setup > >> > > >> > setup( > >> > version="1", > >> > name="TestApp1", > >> > app=["main.py"], > >> > setup_requires=["py2app"] > >> > ) > >> > > >> > setup( > >> > version="1", > >> > name="TestApp2", > >> > app=["main.py"], > >> > setup_requires=["py2app"] > >> > ) > >> > > >> > If it doesn't produce the error it's probably because of this: "The > >> > "cprocessors" module in SQLAlchemy is written in C and compiles > >> > conditionally, based on if the current platform supports compiling it. > >> > If > >> > not present, SQLAlchemy continues to work perfectly well as the hooks > >> > which > >> > attempt to import it will fall back to pure-Python functions instead." > >> > So > >> > you may have a cprocessors.py which I dont think you'd get the > problem, > >> > only > >> > if it compiled the .so when sqlalchemy installed. > >> > > >> > I get the error, but only when it builds the second app. In my main > >> > build > >> > script I make a few apps in the same script (I make 3 apps which get > >> > moved > >> > into the main app, any additional code in their site-packages.zip is > >> > moved > >> > into the main apps zip, I remove the "sub-apps" Contents/Resources/lib > >> > folder and symlink it at run time to the main apps lib folder.) > >> > > >> > Is this a bug or are you never supposed to run multiple setups in the > >> > same > >> > build? If not how can I achieve the above? > >> > >> Paul, I'm also doing multiple calls to setup and it works. > >> Does the main app import sqlalchemy? > >> I ask because just removing SubApp.app/Contents/Resources/lib and > >> symlinking that whole thing will remove anything in > >> SubApp.app/Contents/Resources/lib/pythonx.y/lib-dynload/ , and if the > >> sub app needs something in there that isn't in the lib-dynload path of > >> the main app, then you won't have it in the final package. > >> > >> In my case I have a step that copies files from sub-app lib-dynload > >> folders into the main app's folder before replacing the whole /lib dir > >> with a symlink. > >> Sounds like you might have to do the same thing. > >> > >> Hope this helps, > >> -mike > > > > > > Ah I think I do need that step you're right. my sub apps are a subset of > the > > main app, so I think I've gotten away with not copying anything over. > I'll > > definitely add that into my build script though. > > > > The error isn't related to the fact I symlink the lib folders together, > > though, this is failing while building the second app. I just mentioned > it > > to explain why I want to call setup multiple times, I didn't know if it > was > > a common practice or not. > > > > Yea the main.py is just "import sqlalchemy" in my example, so the first > and > > second app will be the same in the example (both import sqlalchemy). > Could > > you check if you have "cprocessors.so" or "cprocessors.py" in your > > site-packages/sqlalchemy folder? I think the above error only occurs if > you > > have the .so > > Ah, right - good point, the example wouldn't have the issue I mentioned. > > I can't reproduce your issue on OS X 10.7, with a recent trunk version > of py2app. > > With a freshly installed sqlalchemy, building your sample runs fine, and I > get > dist/TestApp2.app/Contents/Resources/lib/python2.7/lib-dynload/sqlalchemy: > total used in directory 144 available 41745048 > drwxr-xr-x 4 mmccrack staff 136 Sep 12 11:11 . > drwxr-xr-x 49 mmccrack staff 1666 Sep 12 11:11 .. > -rw-r--r-- 1 mmccrack staff 34716 Sep 12 11:11 cprocessors.so > -rw-r--r-- 1 mmccrack staff 35960 Sep 12 11:11 cresultproxy.so > > There is a sqlalchemy/cprocessors.py in the site-packages.zip. > > This appears correct to me, and if I add these lines to the main.py: > from sqlalchemy import cprocessors > print cprocessors.__file__ > > I get this: > 9/12/12 11:25:37.274 AM > [0x0-0x317c179].org.pythonmac.unspecified.TestApp2: > > /Users/mmccrack/Documents/Canonical/Source/spikes/test-sqlalchemy-app/dist/TestApp2.app/Contents/Resources/lib/python2.7/lib-dynload/sqlalchemy/cprocessors.so > > So that seems to be working too... > > Not sure if this is helpful or not, I'm now wondering if there's a > 10.6 issue lurking. > -mike > I checked out the latest trunk ( http://svn.pythonmac.org/py2app/py2app/trunk/), installed that and the problem has gone :) Not sure which version I had before, but I only built this mac a week ago or so, so think it's maybe the current version available for download
_______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG