anyone got any suggestions? I've tried the latest version of turbogears
without any luck.

Is there a separate mailing list for tg2exe? I've been trying to get it
to go but as soon as
I put a prod.cfg in and try to run the app I just get
"pkg_resources.DistributionNotFound: TurboGears"

All the best,

Oisin


Oisin Mulvihill wrote:
> Hello,
>
> I've asked a similar question on the py2exe mailing list
> (http://sourceforge.net/mailarchive/message.php?msg_id=37995269)
> without any response. So I'm trying a revised version here instead.
>
> Has anyone actually produced a turbogears app as an exe/standalone
> distro which can then be installed via inno?
> If so could I get a look at your setup.py / build script / magic system
> you used to do this?
>
> Any help on this would be really welcomed as I've spent a week banging
> my head against the wall, with very little
> beneficial affect.
>
> What I've tried:
>
> 1. tg2exe:
>
> Appears to gather everything together without errors. However on
> running the app I just
> keep getting the error:
>
> [EMAIL PROTECTED] [dist]> ./python.exe start-tgpy2exe.pyc
>
> Traceback (most recent call last):
>   File ".\start-tgpy2exe.py", line 5, in ?
>   File "dist\Lib\site-packages\turbogears\__init__.py", line 8, in ?
>   File "dist\Lib\site-packages\turbogears\widgets\__init__.py", line 1,
> in ?
>   File "dist\Lib\site-packages\turbogears\widgets\base.py", line 5, in
> ?
>   File "dist\Lib\site-packages\turbogears\startup.py", line 24, in ?
>   File "dist\Lib\site-packages\pkg_resources.py", line 585, in require
>   File "dist\Lib\site-packages\pkg_resources.py", line 483, in resolve
> pkg_resources.DistributionNotFound: TurboGears
> [EMAIL PROTECTED] [dist]>
>
>
> 2. Manually specifying all modules in py2exe:
>
> I was talking to a friend and he suggested specifying the modules by
> hand in py2exe. I gave this a go
> without success. This was what I ended up with when I first tried using
> py2exe. Manually specifying
> linecache makes no difference:
>
> [EMAIL PROTECTED] [dist]> ./WebPresence.exe
> Traceback (most recent call last):
>   File
> "c:\Python24\lib\site-packages\py2exe-0.6.6-py2.4-win32.egg\py2exe\boot_common.py",
> line 92,
> in ?
>     import linecache
> ImportError: No module named linecache
> Traceback (most recent call last):
>   File "start-tgpy2exe.py", line 2, in ?
> ImportError: No module named pkg_resources
> [EMAIL PROTECTED] [dist]>
>
>
> 3. Trying non-egg installs of the dependancies:
>
> This isn't really a runner as turbogears needs setuptools and I had to
> do some code
> hacks to the dependancies. When I tried this approach I ended up back
> at the
> turbogears not found message I got using tg2exe.
>
> 4. cx_freeze:
>
> This was a last resort. I couldn't really find any examples of people
> trying this
> with turbogears. I built the exe although running it produced the
> error:
>
> [EMAIL PROTECTED] [tgpy2exe]> ./start-tgpy2exe.exe
> Traceback (most recent call last):
>   File "c:\cx_Freeze-3.0.3\initscripts\console.py", line 27, in ?
>     exec code in m.__dict__
>   File "start-tgpy2exe.py", line 5, in ?
>     from turbogears import update_config, start_server
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\__init__.py",
> line 6, in ?
>
>     from turbogears.controllers import expose, flash, validate,
> redirect, \
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\controllers.py",
> line 12,
> in ?
>     from turbogears import view, database, errorhandling, config
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\view\__init__.py",
> line 1,
>  in ?
>     from turbogears.view.base import *
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\view\base.py",
> line 17, in
>  ?
>     from turbogears.i18n import i18n_filter, get_locale
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\i18n\__init__.py",
> line 5,
>  in ?
>     from turbogears.i18n.tg_gettext import gettext, ngettext, install,
> is_locale_supported, \
>   File
> "C:\Python24\lib\site-packages\turbogears-1.0-py2.4.egg\turbogears\i18n\tg_gettext.py",
> line
> 4, in ?
>     from turbojson.jsonify import jsonify
>   File
> "C:\Python24\lib\site-packages\turbojson-1.0-py2.4.egg\turbojson\jsonify.py",
> line 6, in ?
>     from simplejson import JSONEncoder
>   File "C:\Python24\lib\site-packages\simplejson\__init__.py", line 80,
> in ?
>     from decoder import JSONDecoder
>   File "C:\Python24\lib\site-packages\simplejson\decoder.py", line 19,
> in ?
>     NaN, PosInf, NegInf = _floatconstants()
>   File "C:\Python24\lib\site-packages\simplejson\decoder.py", line 13,
> in _floatconstants
>     _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
> LookupError: unknown encoding: hex
> [EMAIL PROTECTED] [tgpy2exe]>
>
> I really don't know where to go from here :(
>
>
> 5. Forcing the customers to use linux.
>
> The ideal solution, but sadly not an option where this app will get
> deployed...
>
>
> My system Info:
>
> * python2.4 running on windows xp.
> * py2exe 0.6.6 (installed via easy_install).
> * turbogears 1.0 (installed via easy_install).
> * build being run in cygwin (I'm not using its python).
>
>
> My current monster/abomination setup.py:
>
> #
> # I'm following/implementing the rough approach here:
> http://www.py2exe.org/index.cgi/ExeWithEggs
> #
> #   1. unpack zipped eggs, because I believe py2exe chokes on them when
> resolving dependencies
> #   2. keep track of the top level packages in the eggs
> #   3. add all of the files in the eggs to the data_files, so that the
> eggs are installed along side the main exe
> #   4. build the exe
> #   5. generate a new library.zip that does not include anything in the
> top level packages found in step 2
> #
> #
> import os
> import sys
> import zipfile
> import subprocess
>
> # will this fix the missing linecache? nope...
> import linecache
>
> # setuptools must be imported first before py2exe
> import setuptools
> import py2exe
> from setuptools import setup, find_packages
> from turbogears.finddata import find_package_data
>
>
> execfile(os.path.join("tgpy2exe", "release.py"))
>
>
> # Here's steps 1 and 2:
> import pkg_resources
> from setuptools.archive_util import unpack_archive
>
> eggdir = r"c:\Python24\Lib\site-packages"
>
> eggs = pkg_resources.require("TurboGears")
>
> for egg in eggs:
>     if os.path.isdir(egg.location):
>         sys.path.insert(0, egg.location)
>         continue
>     unpack_archive(egg.location, eggdir)
>
> eggfiledirs = []
> eggpacks = set()
> eggspth = open("build/eggs.pth", "w")
> for egg in eggs:
>     print egg
>     eggspth.write(os.path.basename(egg.location))
>     eggspth.write("\n")
>     eggpacks.update(egg.get_metadata_lines("top_level.txt"))
>     eggfiledirs.append(egg.location)
> eggspth.close()
> eggpacks.remove("pkg_resources")
>
>
>
> class WebPresenceTarget(object):
>     """Standalone exe for testing.
>     """
>     def __init__(self):
>         self.name = 'Web Presence'
>         self.script = 'start-tgpy2exe.py'
>         self.dest_base = 'WebPresence'
>         self.description='Web Presence for the xyz system (exe)'
>
> data = find_package_data(where='tgpy2exe', package='tgpy2exe')
>
>
> # A failed attempt at step 3.
> data_files = [
>     #
>     # Find package data didn't work, it seems to look for stuff
>     # not part of the package:
>     #
>     # *** copy data files ***
>     # creating z:\aam\tgpy2exe\dist\turbogears
>     # error: can't copy 'turbogears.win32com.test': doesn't exist or
> not a regular file
>     #
>     # ('turbogears', find_package_data(where=eggdir,
> package='turbogears')),
>     #
> ]
>
> opts = {
>     "py2exe": {
>         "compressed": 1,
>         "optimize": 2,
>         "ascii": 1,
>         "bundle_files": 2,
>         "includes": [
>             "kid",
>             "linecache",
>             "paste",
>             "cherrypy",
>             "configobj",
>             "formencode",
>             "turbogears",
>             "turbocheetah",
>             "turbojson",
>             "turbokid",
>             "cElementTree",
>             "simplejson",
>              "pywin",
> #            "pyprotocols",
>             "elementtree",
>             "mx",
>             "isapi",
>             "win32com",
> #            "ruledispatch",
>             "setuptools",
> #            "pastescript",
> #            "cheetah",
> #            "pastedeploy",
> #            "cheetah",
>             "elementtree",
>             "mx.DateTime",
>             "pkg_resources",
>             "encodings.hex_codec",
>         ],
>         "packages" : [
>             "turbogears",
>         ]
>     }
> }
>
>
>
> # Step 4.
> setup(
>     name="tgpy2exe",
>
>     options = opts,
>
>     version=version,
>
>     console = [
>         WebPresenceTarget(),
>     ],
>
>     packages=find_packages(),
>
>     data_files = data_files,
>
>     package_data = data,
> )
>
>
> #sys.exit(0)
>
>
>
> # Step 5:
> import zipfile
>
> oldzipfile = "dist/library.zip"
> newzipfile = "dist/small-library.zip"
>
> oldzip = zipfile.ZipFile(oldzipfile, "r")
> newzip = zipfile.ZipFile(newzipfile, "w", zipfile.ZIP_STORED)
>
> for entry in oldzip.infolist():
>     delim = entry.filename.find("/")
>     if delim == -1:
>         delim = entry.filename.find(".")
>     if delim > -1:
>         if entry.filename[0:delim] in eggpacks:
>             print "Skipping %s, it's in the egg" % (entry.filename)
>             continue
>     newzip.writestr(entry, oldzip.read(entry.filename))
>
> newzip.close()
> oldzip.close()
>
> os.remove(oldzipfile)
> os.rename(newzipfile, oldzipfile)
>
>
>
> # My attempt at getting round step 3 by just copying in the
> # missing egg files directly.
> #
> # Add the required egg files (cygwin needed) to the library
> # zip file, not the best approach:
> #
> #
> def c(cmds, **opts):
>     for cmd in cmds:
>         print cmd
>         app_process = subprocess.Popen(
>             args=cmd,
>             shell=True,
>             **opts
>         )
>         out, err = app_process.communicate()
>         print "%s %s" % (out or "", err or "")
>
>         if app_process.returncode > 0:
>             print "Error: return code %s " %  app_process.returncode
>             sys.exit(1)
>
>
> cmds = [
>     "unzip -o dist/library.zip -d dist/library",
>     "rm -f dist/library.zip",
> ]
> c(cmds)
>
>
> # Copy the decompressed egg directories:
> for file_or_dir in eggfiledirs:
>     c(["cp -r %s dist/library" % file_or_dir])
>
>
> # Copy required setuptools, for the pkg_resources, so the eggs can be
> found:
> cmds = [
>     "cp -r %s\setuptools-0.6c5-py2.4.egg dist/library" % eggdir,
>     "cp -r %s\setuptools.pth dist/library" % eggdir,
>     "cp -r %s\easy-install.pth dist/library" % eggdir,
> ]
> c(cmds)
>
>
> # Rebuild the library with the updated content:
> c(["zip -qr library.zip *"], cwd="dist")
> 
> 
> 
> 
> All the best,
> 
> Oisin


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to