distutils bdist_wininst failure on Linux

S

Steven D'Aprano

Following instructions here:

http://docs.python.org/py3k/distutils/builtdist.html#creating-windows-installers

I am trying to create a Windows installer for a pure-module distribution
using Python 3.2. I get a "LookupError: unknown encoding: mbcs"

Here is the full output of distutils and the traceback:


[steve@ando pyprimes]$ python3.2 setup.py bdist_wininst
running bdist_wininst
running build
running build_py
creating build/lib
copying src/pyprimes.py -> build/lib
installing to build/bdist.linux-i686/wininst
running install_lib
creating build/bdist.linux-i686/wininst
creating build/bdist.linux-i686/wininst/PURELIB
copying build/lib/pyprimes.py -> build/bdist.linux-i686/wininst/PURELIB
running install_egg_info
Writing build/bdist.linux-i686/wininst/PURELIB/pyprimes-0.1.1a-py3.2.egg-info
creating '/tmp/tmp3utw4_.zip' and adding '.' to it
adding 'PURELIB/pyprimes.py'
adding 'PURELIB/pyprimes-0.1.1a-py3.2.egg-info'
creating dist
Warning: Can't read registry to find the necessary compiler setting
Make sure that Python modules winreg, win32api or win32con are installed.
Traceback (most recent call last):
File "setup.py", line 60, in <module>
"License :: OSI Approved :: MIT License",
File "/usr/local/lib/python3.2/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/local/lib/python3.2/distutils/dist.py", line 917, in run_commands
self.run_command(cmd)
File "/usr/local/lib/python3.2/distutils/dist.py", line 936, in run_command
cmd_obj.run()
File "/usr/local/lib/python3.2/distutils/command/bdist_wininst.py", line 179, in run
self.create_exe(arcname, fullname, self.bitmap)
File "/usr/local/lib/python3.2/distutils/command/bdist_wininst.py", line 262, in create_exe
cfgdata = cfgdata.encode("mbcs")
LookupError: unknown encoding: mbcs


How do I fix this, and is it a bug in distutils?
 
J

jmfauth

Following instructions here:

http://docs.python.org/py3k/distutils/builtdist.html#creating-windows...

I am trying to create a Windows installer for a pure-module distribution
using Python 3.2. I get a "LookupError: unknown encoding: mbcs"

Here is the full output of distutils and the traceback:

[steve@ando pyprimes]$ python3.2 setup.py bdist_wininst
running bdist_wininst
running build
running build_py
creating build/lib
copying src/pyprimes.py -> build/lib
installing to build/bdist.linux-i686/wininst
running install_lib
creating build/bdist.linux-i686/wininst
creating build/bdist.linux-i686/wininst/PURELIB
copying build/lib/pyprimes.py -> build/bdist.linux-i686/wininst/PURELIB
running install_egg_info
Writing build/bdist.linux-i686/wininst/PURELIB/pyprimes-0.1.1a-py3.2.egg-info
creating '/tmp/tmp3utw4_.zip' and adding '.' to it
adding 'PURELIB/pyprimes.py'
adding 'PURELIB/pyprimes-0.1.1a-py3.2.egg-info'
creating dist
Warning: Can't read registry to find the necessary compiler setting
Make sure that Python modules winreg, win32api or win32con are installed.
Traceback (most recent call last):
  File "setup.py", line 60, in <module>
    "License :: OSI Approved :: MIT License",
  File "/usr/local/lib/python3.2/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/local/lib/python3.2/distutils/dist.py", line 917, in run_commands
    self.run_command(cmd)
  File "/usr/local/lib/python3.2/distutils/dist.py", line 936, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python3.2/distutils/command/bdist_wininst.py", line 179, in run
    self.create_exe(arcname, fullname, self.bitmap)
  File "/usr/local/lib/python3.2/distutils/command/bdist_wininst.py", line 262, in create_exe
    cfgdata = cfgdata.encode("mbcs")
LookupError: unknown encoding: mbcs

How do I fix this, and is it a bug in distutils?

Because the 'mbcs' codec is missing in your Linux, :)
Traceback (most recent call last):
File "<eta last command>", line 1, in <module>
LookupError: unknown encoding: missing

jmf
 
S

Steven D'Aprano

Following instructions here:

http://docs.python.org/py3k/distutils/builtdist.html#creating- windows...

I am trying to create a Windows installer for a pure-module
distribution using Python 3.2. I get a "LookupError: unknown encoding:
mbcs" [...]
How do I fix this, and is it a bug in distutils?

Because the 'mbcs' codec is missing in your Linux, :)

Well duh :)

This is a bug in distutils. Prompted by your comment I expanded my search
terms and found this bug report:

http://bugs.python.org/issue10945

The problem is that mbcs is not a real codec, it means "whatever codec is
currently configured in Windows". So it doesn't exist on non-Windows
platforms. But distutils bdist_wininst is explicitly documented as
working on non-Windows platforms. Hence, it's a bug.
 
S

Steven D'Aprano

Following instructions here:

http://docs.python.org/py3k/distutils/builtdist.html#creating- windows...

I am trying to create a Windows installer for a pure-module
distribution using Python 3.2. I get a "LookupError: unknown encoding:
mbcs" [...]
How do I fix this, and is it a bug in distutils?

Because the 'mbcs' codec is missing in your Linux, :)

Well duh :)

This is a bug in distutils. Prompted by your comment I expanded my
search terms and found this bug report:

http://bugs.python.org/issue10945

The problem is that mbcs is not a real codec, it means "whatever codec
is currently configured in Windows". So it doesn't exist on non-Windows
platforms. But distutils bdist_wininst is explicitly documented as
working on non-Windows platforms. Hence, it's a bug.


And I have a work-around that seems to work for me. Put this at the top
of your setup.py install script:



# Work around mbcs bug in distutils.
# http://bugs.python.org/issue10945
import codecs
try:
codecs.lookup('mbcs')
except LookupError:
ascii = codecs.lookup('ascii')
func = lambda name, enc=ascii: {True: enc}.get(name=='mbcs')
codecs.register(func)
 
B

Bob Bowles

Steven D'Aprano-11 wrote
And I have a work-around that seems to work for me. Put this at the top
of your setup.py install script:



# Work around mbcs bug in distutils.
# http://bugs.python.org/issue10945
import codecs
try:
codecs.lookup('mbcs')
except LookupError:
ascii = codecs.lookup('ascii')
func = lambda name, enc=ascii: {True: enc}.get(name=='mbcs')
codecs.register(func)
Nice one, worked first time! Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top