[python-win32] python com and py2exe
Mark Hammond
mhammond at skippinet.com.au
Mon Apr 17 02:58:19 CEST 2006
Are you sure you need a COM .exe and not a COM .DLL? When you tested this
using a .py implemented server, did you take steps to ensure that was only
ever using a .exe COM object too?
Otherwise, it would seem to be py2exe related - you will need to use the
archives to find explanations I have given for debugging this environment,
both to this mailing list and the py2exe-users list.
Cheers,
Mark
> -----Original Message-----
> From: python-win32-bounces at python.org
> [mailto:python-win32-bounces at python.org]On Behalf Of Floris van Nee
> Sent: Sunday, 16 April 2006 8:29 AM
> To: python-win32 at python.org
> Subject: [python-win32] python com and py2exe
>
>
> Hi,
>
> No-one answered to my previous email, maybe you didn't know the answer
> or maybe it wasn't received properly. Anyway here is it again, does
> any of you know the answer? Im still struggling with it..
>
> Previous email:
> I'm trying to convert my Python script, which is a COM server, to an
> exe file. I'm using py2exe 0.6.5. But I ran into a few problems. After
> a lot of work I was able to run py2exe on my script and create the exe
> file. I was able to use exectablename.exe --register and --unregister
> and it returned text that it registered/unregistered the com server,
> but I wasn't able to connect to it using VB .NET. VB gave me an error
> saying that it couldn't create the ActiveX component. The normal
> python file works normally if I try to import the com object from VB,
> but the exe doesn't work. So I think there's something I do wrong in
> the setup file or so, or maybe I have to put something else in my
> Python file, I dont know, I hope some of you do. Here is my Python
> script and the setup.py (for py2exe) script:
> setup.py:
>
> from distutils.core import setup
> import py2exe
>
> setup(console=['testcomserver.py'],
> scripts=['testcomserver.py'],
> name='testcomserver')
>
>
>
>
> actual script:
>
> from urllib import urlopen
> import sys
> import pythoncom
> class Runescape1:
> _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
> if hasattr(sys, 'importers'):
> # In the py2exe-packed version, specify the module.class
> # to use. In the python script version, python is able
> # to figure it out itself.
> _reg_class_spec_ = "__main__.Runescape1"
> _reg_clsid_ = "{6CF99217-4AE8-486A-9858-BE798F8671BC}"
> _reg_progid_ = "Python.Runescape1"
> _public_methods_ = ['Lookup', 'ChangeXP', 'ServerStatus',
> 'MultiplyString']
> _public_attrs_ = ['softspace', 'noCalls']
> _readonly_attrs_ = ['noCalls']
> def __init__(self):
> self.softspace = 1
> self.noCalls = 0
> def Lookup(self, nick):
> url =
> "http://hiscore.runescape.com/lang/en/aff/runescape/hiscorepersona
> l.ws?user1="
> + nick
> f = urlopen(url, 'r').read()
> search_start = '<a href="overall.ws?table=0&user='
> search_end = '</table>'
> f = f[f.find(search_start):f.find(search_end)]
> f = f.replace('Not Ranked', 'N/A N/A N/A')
> while '<' in f:
> a = f.find('<')
> b = f.find('>')
> f = f[:a] + f[b+1:]
> if 'does not feature in the hiscores' in f:
> f = ''
> for x in range(89):
> f += ' '
> return f
> def ChangeXP(self, xp):
> if len(xp) > 3:
> xp = xp[:len(xp)-3] + ',' + xp[len(xp)-3:]
> if len(xp) > 7:
> xp = xp[:len(xp)-7] + ',' + xp[len(xp)-7:]
> return xp
> def ServerStatus(self):
> servers = []
> servers1 = ''
> url =
> 'http://www.runescape.com/serverlist.ws?plugin=0&lores.x=232&lores.y=82'
> f = urlopen(url).read()
> f = f[f.find('<img
> src="http://www.runescape.com/lang/en/aff/runescape/img/serverlist
> /harrow_down.gif'):]
> while '<' in f:
> a = f.find('<')
> b = f.find('>')
> f = f[:a] + f[b+1:]
> for a in range(1,122):
> search = 'World ' + str(a) + ' '
> start = f.find(search)
> servers += [f[start+6:start+len(search)+4]]
> if ';Type Wo' in servers:
> del servers[servers.index(';Type Wo')]
> servers = servers[:115] + ['116 DOWN'] + servers[115:]
> for a in servers:
> servers1 += a + ','
> return servers1
> def MultiplyString(self, string, times):
> string = times*string
> return string
> if hasattr(sys, 'importers'):
> # we are running as py2exe-packed executable
> pythoncom.frozen = 1
>
> if __name__=='__main__':
> if hasattr(sys, 'importers'):
> # running as packed executable.
> if '--register' in sys.argv[1:] or '--unregister'
> in sys.argv[1:]:
> # --register and --unregister work as usual
> import win32com.server.register
> win32com.server.register.UseCommandLine(Runescape1)
> else:
> # start the server.
> from win32com.server import localserver
> localserver.main()
> else:
> import win32com.server.register
> win32com.server.register.UseCommandLine(Runescape1)
>
>
>
>
> That was my whole file, not all of this is probably needed for an
> answer, but I thought I'd mail the whole py file. You can ignore every
> function in the Runescape1 class if you want :P.
>
>
> Thanks in advance,
>
>
> Floris
> _______________________________________________
> Python-win32 mailing list
> Python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
>
More information about the Python-win32
mailing list