修改第三方应用的import语句



我有一个django应用程序,我正在导入一个第三方应用程序。该应用程序是为python3编写的,但是我的应用程序环境是python 2.7和django 1.11.16。

第三方应用程序可以很好地与python2一起工作,除了开头的一行。第三方应用程序的一个文件包含这个:

from urllib.parse import urlencode, quote

。如果我把这行改成

from urllib import urlencode, quote

在虚拟环境中,它工作得很好,但这是一个非常糟糕的解决方案。

我不想分叉整个应用程序,但是有没有其他的方法来解决这个问题?

免责声明:考虑到不再支持Python2,您将发现与您的代码兼容的库越来越少。我认为最好的办法是升级你的Python版本。这两个工具可以帮助你很多:

  • https://docs.python.org/3/library/2to3.html
  • https://pypi.org/project/six/

说到这里,可能还有另一种让它工作的方法。在你的应用程序的入口点(在Django中是manage.py,也可以在settings.py中工作),你可以这样做:

import sys
sys.modules['urllib.parse'] = __import__('urllib')
from urllib.parse import urlencode, quote # works now

如果这是唯一的区别,它可以工作,但我发现代码相当危险。

最新更新