我有一个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
如果这是唯一的区别,它可以工作,但我发现代码相当危险。