I’m using Python 3.4 on Windows. Recently I tried to install and use Sphinx. When I did, I encountered an error that ended with the string
an integer is required (got type str)
Googling that string, I found an explanation of the problem on stackoverflow, HERE. As Andy Skirrow wrote on August 3, 2015, this is a bug in the current distribution of babel.
a pickled file babel/global.dat is included in a the package and this can’t be read by python 3 because it was created by script running under python 2.
The problem (as I understand it) is that Python 2.x pickles/unpickles datetime objects as ASCII strings, but Python 3.x pickles/unpickles them as Unicode strings.
The babel folks are working on it. But until they fix it, I needed a really simple-minded solution. I needed something that would fit my brain.
Fortunately, I still had Python 2.7 installed on my PC. So here is what I did.
- I went into the Python34 site-packages/babel folder, found the globals.dat file, and copied it into the Python27 folder.
- I wrote a program fix_a to unpickle (load) the globals.dat file and save it as a string. I saved this program in the Python27 folder, and ran it under Python 2.7.
- I wrote a program fix_b that imported the datetime module and repickled the string into a file named globals.dat. I saved this program in the Python34 folder, and ran it under Python 3.4.
- I copied the new globals.dat file over the original globals.dat file in the Python34 site-packages/babel folder.
It worked. Sphinx is now working fine.
The text of fix_a.py is:
import pickle f = open("global.dat","rb") obj = pickle.load(f) f.close() print(repr(obj))
and I ran it this way, from inside the Python27 folder:
python -m fix_a > junk.txt
The text of fix_b.py is:
import datetime import pickle d = [copied the text of junk.txt here] f = open("global.dat", "wb") pickle.dump(d, f) f.close()
and I ran it this way, from inside the Python34 folder:
python -m fix_b
To save you some trouble, here is the Python 3.4 globals.dat file that I made. Because WordPress wouldn’t allow me to upload it with a “dat” extension, it has a “doc” extension. When you download it, you should rename it and give it a “dat” extension.