Pytz error: unpack requires a string argument of length 44

B

bringa

Hi!

I'm trying to get a handle on pytz (http://pytz.sourceforge.net/). I don't have root on the system I'll be running my script on, so I need to go for alocal installation. I copied pytz into a folder in my sys.path and am importing from there. That part seems to work. I downloaded the tarball on http://pypi.python.org/pypi/pytz/#downloads

So now I'm walking through the examples on http://pytz.sourceforge.net/#example-usage. This is what happens:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\code\SoF\serversonfire\pytz\__init__.py", line 181, in timezone
_tzinfo_cache[zone] = build_tzinfo(zone, fp)
File "C:\code\SoF\serversonfire\pytz\tzfile.py", line 30, in build_tzinfo
typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
error: unpack requires a string argument of length 44


Can anyone explain to me why that call fails?
 
T

Terry Reedy

Hi!

I'm trying to get a handle on pytz (http://pytz.sourceforge.net/). I don't have root on the system I'll be running my script on, so I need to go for a local installation. I copied pytz into a folder in my sys.path and am importing from there. That part seems to work. I downloaded the tarball on http://pypi.python.org/pypi/pytz/#downloads

So now I'm walking through the examples on http://pytz.sourceforge.net/#example-usage. This is what happens:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)Traceback (most recent call last):
File "<console>", line 1, in<module>
File "C:\code\SoF\serversonfire\pytz\__init__.py", line 181, in timezone
_tzinfo_cache[zone] = build_tzinfo(zone, fp)
File "C:\code\SoF\serversonfire\pytz\tzfile.py", line 30, in build_tzinfo
typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
error: unpack requires a string argument of length 44


Can anyone explain to me why that call fails?

1. Either pytz has a bug, it was not installed correctly, or it does not
work on windows.

2. If you read the module struct section of the fine manual, which you
can easily find by typing 'unpack' on the Index tab of the Windows help
version of the manual, it will tell you the following. Unpack takes two
arguments, a format defining character fields of specifics lengths and a
string whose length must be the sum of those lengths. (The contents of
each field must also match the format spec, but you never got that far.)
If there is a length mismatch, you get the message above.

3. In the specific case, we may presume that head_size is the sum of
field lengths for head_fmt. (You could check; if not, that is a bug.)
Since fp.read cannot read too many bytes, it must have read too little.
("Read up to n bytes from the object and return them.")

You could look in
C:\code\SoF\serversonfire\pytz\__init__.py
and see what file fp is supposed to be and then take a look at the file.
Is it empty? Is anything read before the statement that failer?
 
B

bringa

Thanks Terry!

There indeed seems to be something wrong with my installation of pytz. I had a look around the zoneinfo dir, which is where build_tzinfo polls its info from, and a whole bunch of files are 0 bytes. Whenever I try to instantiate a timezone whose corresponding file is 0 bytes I get that error (it's trying to read the head of the tzinfo file to make sure the right magic bytesare in there, and reading 44 bytes out of a 0 byte file isn't going to work).

So I guess I'll poke around to find some specific help with pytz or a non-broken zoneinfo dir.

Hi!

I'm trying to get a handle on pytz (http://pytz.sourceforge.net/). I don't have root on the system I'll be running my script on, so I need to go for a local installation. I copied pytz into a folder in my sys.path and am importing from there. That part seems to work. I downloaded the tarball on http://pypi.python.org/pypi/pytz/#downloads

So now I'm walking through the examples on http://pytz.sourceforge.net/#example-usage. This is what happens:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
from datetime import datetime, timedelta
from pytz import timezone
import pytz
utc = pytz.utc
utc.zone 'UTC'
eastern = timezone('US/Eastern')
Traceback (most recent call last):
File "<console>", line 1, in<module>
File "C:\code\SoF\serversonfire\pytz\__init__.py", line 181, in timezone
_tzinfo_cache[zone] = build_tzinfo(zone, fp)
File "C:\code\SoF\serversonfire\pytz\tzfile.py", line 30, in build_tzinfo
typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
error: unpack requires a string argument of length 44


Can anyone explain to me why that call fails?

1. Either pytz has a bug, it was not installed correctly, or it does not
work on windows.

2. If you read the module struct section of the fine manual, which you
can easily find by typing 'unpack' on the Index tab of the Windows help
version of the manual, it will tell you the following. Unpack takes two
arguments, a format defining character fields of specifics lengths and a
string whose length must be the sum of those lengths. (The contents of
each field must also match the format spec, but you never got that far.)
If there is a length mismatch, you get the message above.

3. In the specific case, we may presume that head_size is the sum of
field lengths for head_fmt. (You could check; if not, that is a bug.)
Since fp.read cannot read too many bytes, it must have read too little.
("Read up to n bytes from the object and return them.")

You could look in
C:\code\SoF\serversonfire\pytz\__init__.py
and see what file fp is supposed to be and then take a look at the file.
Is it empty? Is anything read before the statement that failer?
 
B

bringa

Thanks Terry!

There indeed seems to be something wrong with my installation of pytz. I had a look around the zoneinfo dir, which is where build_tzinfo polls its info from, and a whole bunch of files are 0 bytes. Whenever I try to instantiate a timezone whose corresponding file is 0 bytes I get that error (it's trying to read the head of the tzinfo file to make sure the right magic bytesare in there, and reading 44 bytes out of a 0 byte file isn't going to work).

So I guess I'll poke around to find some specific help with pytz or a non-broken zoneinfo dir.

Hi!

I'm trying to get a handle on pytz (http://pytz.sourceforge.net/). I don't have root on the system I'll be running my script on, so I need to go for a local installation. I copied pytz into a folder in my sys.path and am importing from there. That part seems to work. I downloaded the tarball on http://pypi.python.org/pypi/pytz/#downloads

So now I'm walking through the examples on http://pytz.sourceforge.net/#example-usage. This is what happens:

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
from datetime import datetime, timedelta
from pytz import timezone
import pytz
utc = pytz.utc
utc.zone 'UTC'
eastern = timezone('US/Eastern')
Traceback (most recent call last):
File "<console>", line 1, in<module>
File "C:\code\SoF\serversonfire\pytz\__init__.py", line 181, in timezone
_tzinfo_cache[zone] = build_tzinfo(zone, fp)
File "C:\code\SoF\serversonfire\pytz\tzfile.py", line 30, in build_tzinfo
typecnt, charcnt) = unpack(head_fmt, fp.read(head_size))
error: unpack requires a string argument of length 44


Can anyone explain to me why that call fails?

1. Either pytz has a bug, it was not installed correctly, or it does not
work on windows.

2. If you read the module struct section of the fine manual, which you
can easily find by typing 'unpack' on the Index tab of the Windows help
version of the manual, it will tell you the following. Unpack takes two
arguments, a format defining character fields of specifics lengths and a
string whose length must be the sum of those lengths. (The contents of
each field must also match the format spec, but you never got that far.)
If there is a length mismatch, you get the message above.

3. In the specific case, we may presume that head_size is the sum of
field lengths for head_fmt. (You could check; if not, that is a bug.)
Since fp.read cannot read too many bytes, it must have read too little.
("Read up to n bytes from the object and return them.")

You could look in
C:\code\SoF\serversonfire\pytz\__init__.py
and see what file fp is supposed to be and then take a look at the file.
Is it empty? Is anything read before the statement that failer?
 
P

Prasad, Ramit

There indeed seems to be something wrong with my installation of pytz. I had a
look around the zoneinfo dir, which is where build_tzinfo polls its info from,
and a whole bunch of files are 0 bytes. Whenever I try to instantiate a
timezone whose corresponding file is 0 bytes I get that error (it's trying to
read the head of the tzinfo file to make sure the right magic bytes are in
there, and reading 44 bytes out of a 0 byte file isn't going to work).

So I guess I'll poke around to find some specific help with pytz or a non-
brokenzoneinfo dir.

Did you follow the installation instructions located on the front page?

I would unpack the tarball (not in a Python directory) and then do
`python setup.py install` (use the fullpath to the executable you want
the module installed to if you have more than one version of Python installed)
from the directory with the unpacked contents of the tarball. I did not need
admin rights to manually install on Windows, but that might depend on
where your Pythonis installed.

Ramit


Ramit Prasad | JPMorgan Chase Investment Bank | Currencies Technology
712 Main Street | Houston, TX 77002
work phone: 713 - 216 - 5423

--
This emailis confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.
 
D

Daniel Klein

The windows box is my development box, it's not where the script will be running in the end. It'll be running on a Linux box where I don't have root so python setup.py install isn't an option (to my understanding).

So what happened is that 7zip didn't unzip the .tar.gz2 properly, but it does fine with the .zip from the Python Package Index. Using the zoneinfo from the properly unzipped file everything works.

Thanks everyone, consider this solved.
 
D

Daniel Klein

The windows box is my development box, it's not where the script will be running in the end. It'll be running on a Linux box where I don't have root so python setup.py install isn't an option (to my understanding).

So what happened is that 7zip didn't unzip the .tar.gz2 properly, but it does fine with the .zip from the Python Package Index. Using the zoneinfo from the properly unzipped file everything works.

Thanks everyone, consider this solved.
 

Members online

No members online now.

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,699
Latest member
AnneRosen

Latest Threads

Top