Python 2 to 3 conversion - embrace the pain

INADA Naoki songofacandy at gmail.com
Fri Mar 13 18:27:44 EDT 2015


Hi, John.  I'm maintainer of PyMySQL.

I'm sorry about bug of PyMySQL.  But the bug is completely unrelated
to Python 3.
You may encounter the bug on Python 2 too.

I've already made mysqlclient, the fork of MySQLdb supporting Python 3.


On Sat, Mar 14, 2015 at 6:08 AM, John Nagle <nagle at animats.com> wrote:
>   I'm approaching the end of converting a large system from Python 2 to
> Python 3.  Here's why you don't want to do this.
>
>   The language changes aren't that bad, and they're known and
> documented.  It's the package changes that are the problem.
> Discovering and fixing all the new bugs takes a while.
>
>
> BeautifulSoup:
>
> BeautifulSoup 3 has been phased out. I had my own version of
> BeautifulSoup 3, modified for greater robustness.  But that was
> years ago.  So I converted to BeautifulSoup 4, as the documentation
> says to do.
>
> The HTML5parser module is claimed to parse as a browser does, with
> all the error tolerance specified in the HTML5 spec. (The spec
> actually specifies how to handle bad HTML consistently across
> browsers in great detail, and HTML5parser has code in it for that.)
>
> It doesn't deliver on that promise, though. Some sites crash
> BeautifulSoup 4/HTML5parser.  Try "kroger.com", which has HTML with
> <head><head>.  The parse tree constructed has a bad link,
> and trying to use the parse tree results in exceptions.
> Submitted bug report.  Appears to be another case of
> a known bug.  No workaround at this time.
>
> https://bugs.launchpad.net/beautifulsoup/+bug/1270611
> https://bugs.launchpad.net/beautifulsoup/+bug/1430633
>
>
> PyMySQL:
>
> "Pymysql is a pure Python drop-in replacement for MySQLdb".
> Sounds good.  Then I discover that LOAD DATA LOCAL wasn't
> implemented in the version on PyPi.  It's on Github, though,
> and I got the authors to push that out to PyPi.  It
> works on test cases.  But it doesn't work on a big job,
> because the default size of MySQL packets was set to 16MB.
> This made the LOAD DATA LOCAL code try to send the entire
> file being loaded as one giant MySQL packet.  Unless you
> configure the MySQL server with 16MB buffers, this fails, with
> an obscure "server has gone away" message.  Found the
> problem, came up with a workaround, submitted a bug report,
> and it's being fixed.
>
> https://github.com/PyMySQL/PyMySQL/issues/317
>
>
> SSL:
>
> All the new TLS/SSL support is in Python 3. That's good.
> Unfortunately, using Firefox's set of SSL certs, some
> important sites (such as "verisign.com") don't validate.
> This turned out to be a complex problem involving Verisign
> cross-signing a certificate, which created a certificate
> hierarchy that some versions of OpenSSL can't handle.
> There's now a version of OpenSSL that can handle it, but
> the Python library has to make a call to use it, and
> that's going in but isn't deployed yet.  This bug
> resulted in much finger-pointing between the Python
> and OpenSSL developers, the Mozilla certificate store
> maintainers, and Verisign.  It's now been sorted out,
> but not all the fixes are deployed.  Because "ssl" is
> a core Python module, this will remain broken until the
> next Python release, on both the 2.7 and 3.4 lines.
>
> Also, for no particularly good reason, the exception
> "SSL.CertificateError" is not a subclass of "SSL.Error",
> resulting in a routine exception not being recognized.
>
> Bug reports submitted for both OpenSSL and Python SSL.
> Much discussion.  Problem fixed, but fix is in next
> version of Python.  No workaround at this time.
>
> http://bugs.python.org/issue23476
>
>
> Pickle:
>
> As I just posted recently, CPickle on Python 3.4 seems to
> have a memory corruption bug.  Pure-Python Pickle is fine.
> So a workaround is possible.  Bug report submitted.
>
> http://bugs.python.org/issue23655
>
>
> Converting a large application program to Python 3
> thus required diagnosing four library bugs and filing
> bug reports on all of them.  Workarounds are known
> for two of the problems.  I can't deploy the Python 3
> version on the servers yet.
>
>                                 John Nagle
> --
> https://mail.python.org/mailman/listinfo/python-list



-- 
INADA Naoki  <songofacandy at gmail.com>



More information about the Python-list mailing list