By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,814 Members | 1,136 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,814 IT Pros & Developers. It's quick & easy.

PyPI bdist_wininst upload failing

P: n/a
I just tried to upload new versions of the argparse module to PyPI, but
it seems like I can no longer upload Windows installers:

$ setup.py sdist bdist_wininst upload
...
running upload
Submitting dist\argparse-0.8.0.zip to http://www.python.org/pypi
Server response (200): OK
Submitting dist\argparse-0.8.0.win32.exe to http://www.python.org/pypi
Upload failed (400): Bad Request

Anyone know what I'm doing wrong? (I've always been able to upload
bdist_wininst packages to PyPI in the past.)

STeVe
May 26 '07 #1
Share this Question
Share on Google+
6 Replies


P: n/a
Steven Bethard wrote:
I just tried to upload new versions of the argparse module to PyPI, but
it seems like I can no longer upload Windows installers:

$ setup.py sdist bdist_wininst upload
...
running upload
Submitting dist\argparse-0.8.0.zip to http://www.python.org/pypi
Server response (200): OK
Submitting dist\argparse-0.8.0.win32.exe to http://www.python.org/pypi
Upload failed (400): Bad Request

Anyone know what I'm doing wrong? (I've always been able to upload
bdist_wininst packages to PyPI in the past.)
Still haven't figured this out yet, but I discovered that I get a
slightly more informative message if I do the upload manually with the
PyPI form. It then says:

Error processing form

invalid distribution file

Looks like this originates from:

https://svn.python.org/packages/trunk/pypi/webui.py

down near the bottom in the file_upload() method. I can't figure out
which "invalid distribution file" error is being triggered, but in
looking around, I saw that is_distutils_file() in:

https://svn.python.org/packages/trun...fy_filetype.py

says:

if filename.endswith('.exe'):
# check for valid exe
if filetype != 'bdist_wininst':
return False

try:
t = StringIO.StringIO(content)
t.filename = filename
z = zipfile.ZipFile(t)
l = z.namelist()
except zipfile.error:
return False

for zipname in l:
if not safe_zipnames.match(zipname):
return False

That seems a little weird to me. Are the bdist_wininst exe files really
zip files? Or did I just misunderstand what "content" is?

STeVe
May 27 '07 #2

P: n/a
On May 27, 4:20 pm, Steven Bethard <steven.beth...@gmail.comwrote:
Steven Bethard wrote:
I just tried to upload new versions of the argparse module to PyPI, but
it seems like I can no longer upload Windows installers:
[snip]
That seems a little weird to me. Are the bdist_wininst exe files really
zip files? Or did I just misunderstand what "content" is?

STeVe
They are exe files with a zip appended. Try out the above code on your
file; it may just help you suss out what the problem is.
E.g.:
>>import zipfile
zipfile.ZipFile('xlrd-0.6.1a4.win32.exe').namelist()
['PURELIB/xlrd-0.6.1a4-py2.5.egg-info', 'PURELIB/xlrd/biffh.py',
.... snip ...
'SCRIPTS/xlrdnameAPIdemo.py']
>>>
HTH,
John

May 27 '07 #3

P: n/a
John Machin wrote:
On May 27, 4:20 pm, Steven Bethard <steven.beth...@gmail.comwrote:
>Steven Bethard wrote:
>>I just tried to upload new versions of the argparse module to PyPI, but
it seems like I can no longer upload Windows installers:
[snip]
>That seems a little weird to me. Are the bdist_wininst exe files really
zip files? Or did I just misunderstand what "content" is?

They are exe files with a zip appended. Try out the above code on your
file; it may just help you suss out what the problem is.
E.g.:
>>>import zipfile
zipfile.ZipFile('xlrd-0.6.1a4.win32.exe').namelist()
['PURELIB/xlrd-0.6.1a4-py2.5.egg-info', 'PURELIB/xlrd/biffh.py',
... snip ...
'SCRIPTS/xlrdnameAPIdemo.py']
Interesting. Thanks!
>>zipfile.ZipFile('argparse-0.8.0.win32.exe').namelist()
['.../lib/argparse-0.8.0-py2.5.egg-info', '.../lib/argparse.py']

Interestingly, it looks like none of these are "safe_zipnames" according to:

https://svn.python.org/packages/trun...fy_filetype.py

I wonder why that is...

Also, I couldn't get the StringIO code from there to work:
>>import StringIO
content = open('argparse-0.8.0.win32.exe').read()
t = StringIO.StringIO(content)
t.filename = 'argparse-0.8.0.win32.exe'
z = zipfile.ZipFile(t)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python25\lib\zipfile.py", line 346, in __init__
self._GetContents()
File "C:\Python25\lib\zipfile.py", line 366, in _GetContents
self._RealGetContents()
File "C:\Python25\lib\zipfile.py", line 378, in _RealGetContents
raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file

STeVe
May 27 '07 #4

P: n/a
En Sun, 27 May 2007 12:19:03 -0300, Steven Bethard
<st************@gmail.comescribió:
Also, I couldn't get the StringIO code from there to work:
>>import StringIO
>>content = open('argparse-0.8.0.win32.exe').read()
Use open("...","rb").read() - the "b" is important on Windows.

--
Gabriel Genellina

May 27 '07 #5

P: n/a
Gabriel Genellina wrote:
En Sun, 27 May 2007 12:19:03 -0300, Steven Bethard
<st************@gmail.comescribió:
>Also, I couldn't get the StringIO code from there to work:
> >>import StringIO
content = open('argparse-0.8.0.win32.exe').read()

Use open("...","rb").read() - the "b" is important on Windows.
Ahh, great. Thanks.

So any ideas why distutils is generating a bdist_wininst installer with
file names like:

lib/argparse-0.8.0-py2.5.egg-info
lib/argparse.py

instead of what John Machin had:

PURELIB/xlrd-0.6.1a4-py2.5.egg-info
PURELIB/xlrd/biffh.py

The ones with 'lib' instead of 'PURELIB' will get rejected by the
safe_zipnames regular expression in verify_filetype.py:

re.compile(r'(purelib|platlib|headers|scripts|data ).+', re.I)

Is there something I need to do when running 'setup.py bdist_wininst' to
get 'PURELIB' instead of 'lib'?

STeVe
May 27 '07 #6

P: n/a
Steven Bethard wrote:
Gabriel Genellina wrote:
>En Sun, 27 May 2007 12:19:03 -0300, Steven Bethard
<st************@gmail.comescribió:
>>Also, I couldn't get the StringIO code from there to work:

>>import StringIO
>>content = open('argparse-0.8.0.win32.exe').read()

Use open("...","rb").read() - the "b" is important on Windows.

Ahh, great. Thanks.

So any ideas why distutils is generating a bdist_wininst installer with
file names like:

lib/argparse-0.8.0-py2.5.egg-info
lib/argparse.py

instead of what John Machin had:

PURELIB/xlrd-0.6.1a4-py2.5.egg-info
PURELIB/xlrd/biffh.py

The ones with 'lib' instead of 'PURELIB' will get rejected by the
safe_zipnames regular expression in verify_filetype.py:

re.compile(r'(purelib|platlib|headers|scripts|data ).+', re.I)

Is there something I need to do when running 'setup.py bdist_wininst' to
get 'PURELIB' instead of 'lib'?
I figured it out. As suggested here:

http://peak.telecommunity.com/DevCen...r-installation

I had created a distutils.cfg to redirect my installs from the regular
site-packages directory.

Since the distutils.cfg settings are read in for all distutils uses at
the command line, they were also being read in when I tried to run
"setup.py bdist_wininst", and so all my filenames were getting the
altered paths instead of the regular PURELIB ones.

Thanks everyone for the help!

STeVe
May 27 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.